zoukankan      html  css  js  c++  java
  • c语言各类问题 代码

    定义一个结构体,有两个成员变量,一个整型的n,一个字符型的c,利用结构体类型声明一个具有5个元素的数组,并随机初始化,根据成员变量n进行从小到大排序,然后输出
    冒泡排序然后 在输出结构体
    #include<stdio.h>
    struct d
    {
    int x;
    char y;
    };
    int main(void)
    {
    struct d a[5];
    int i,d;
    int b[6];
    for(i=0;i<5;i++)
    {
    scanf("%d%c",&a[i].x,&a[i].y);
    }
    for(i=0;i<5;i++)
    {
    b[i]=a[i].x;

    }
    for(i=0;i<5;i++)
    {
    for(d=0;d<5-i;d++)
    {
    if(b[d]>b[d+1])
    {
    b[6]=b[d]+b[d+1];
    b[d]=b[6]-b[d];
    b[d+1]=b[6]-b[d];
    }
    }
    }

    for(i=0;i<5;i++)
    {
    for(d=0;d<5;d++)
    {
    if(b[i]==a[d].x)
    {
    printf("%d%c",a[d].x,a[d].y);
    }
    }
    }
    return 0;
    }
    //字母 顺序输出
    #include<stdio.h>
    int main(void)
    {
    char a,b;
    scanf("%c%c",&a,&b);

    if(a>b)

    {
        
    while(a>=b)
       {
         printf("%c",a);
          a--;
       }
    }
    else
    {
           while(b>=a)
             {
                printf("%c",b);
                b--;
             }
    }
    return 0;
    }


    //输出数组的个数比较多的 数字
    #include<stdio.h>
    int main (void)
    {
        int a1[10],a2[10]={0,0,0,0,0,0,0,0,0,0},a3[10];
        int i,j,Max=0,ci=0,k=0;
        
        for(i=0;i<10;i++)
        {
            scanf("%d",&a1[i]);
        }
        
        for(j=0;j<10;j++)
        {
           for(i=0;i<10;i++)
           {
              if(a1[j]==a1[i])
              {
                a2[j]++;
              }
            }
        }
        for(i=0;i<10;i++)
        {
        if(Max<a2[i])
        {
            Max=a2[i];
        }
        }
        j=0;
        for(i=0;i<10;i++)
        {
        if(Max==a2[i])
        {
            for(j=0;j<k;j++)
            {
             if(a3[j]==a1[i])
               {
                 ci++;
               }
            }
            if(ci==0)
           {
               printf("%d",a1[i]);
                  a3[k]=a1[i];
                  k++;
           }
           else
           break;
            
        }
        }
        return 0;
    }
    //杨辉三角
    #include  <stdio.h>
    main()
    { int i,j,n=0,a[17][17]={0};
      while(n<1 || n>16)
      { printf("请输入杨辉三角形的行数:");
        scanf("%d",&n);
      }
      for(i=0;i<n;i++)
        a[i][0]=1;      /*第一列全置为一*/
      for(i=1;i<n;i++)
        for(j=1;j<=i;j++)
          a[i][j]=a[i-1][j-1]+a[i-1][j];/*每个数是上面两数之和*/
      for(i=0;i<n;i++)   /*输出杨辉三角*/
      { for(j=0;j<=i;j++)
          printf("%5d",a[i][j]);
        printf(" ");
      }
    }

    //输出数组中增加和减小的数组

    #include<stdio.h>
    int main(void)
    {
    int i,j=0,a,Arry[10],Copy[10];
    int t=0,f=0;
    for(i=0;i<10;i++)//输入数组数据
    {
    scanf("%d",&Arry[i]);
    }
    for(i=0;i<10;i++)
    {
    if(i<9)
    {
    if(Arry[i]<Arry[i+1])//判断增长还是降低
    {
    f=1;
    }
    else
    {
    t=-1;
    }
    Copy[i]=Arry[i];//赋值给另外的 数组
    }
    else
    {
    Copy[i]=Arry[i];//赋值给另外的 数组
    }
    if(((t+f) == 0)||(i==9))//若等于9直接输出
    {
    if(i < 9)
    {
    for(a=j;a<i+1;a++)
    {
    printf("%d",Copy[a]);
    printf(" ");
    t=0;
    f=0;
    }
    j=i;
    i--;
    }
    else
    {
    for(a=j;a<i+1;a++)
    {
    printf("%d",Copy[a]);
    printf(" ");
    t=0;
    f=0;
    }
    break;
    }
    }
    }
    return 0;
    }


    /字符数组 逆序输出
    //这里边是用二维数组存储
    for循环超过了条件才会跳出来,所以下边要i--;
    #include<stdio.h>
    int main(void)
    {
    char a[20][3];
    int i=0,k;
    for(i=0;i<20;i++)
    {
    scanf("%c",&a[i][0]);
    }
    i--;
    for(k=i;k>=0;k--)
    {
    // if(a[k][0]!=32)
    {
    printf("%c ",a[k][0]);
    }
    }
    return 0;
    }<string.h>
    int main(void)
    {
    char a[100][12];
    int i=0,k;
    for(i=0;i<20;i++)
    {
    scanf("%c",&a[i][0]);
    }
    for(k=i;k>=0;k--)
    {
    printf("%c ",a[k][0]);
    }
    return 0;
    }

    数字分解求和
    #include <stdio.h>
    void swap(int a)
    {
        int i=0,sum=0,j,k,b=0;
        for(j=1;j<a;j++)
        {
            for(i = j; i < a;i ++)
            {
                sum += i;
                if(sum == a )
                {
                        sum = 0;
                        b++;
                        printf("%d=",a);
                       for(k = j;k < i;k ++)
                        printf("%d+",k);
                        printf("%d ",i);
                         break;
                }
                
            }
            sum=0;//每次用过后清零 否则 影响下次的求和
         }
        if(b==0)
            printf("无法分解");
    }
    int main( void)
    {
        int a;
        scanf("%d",&a);
        swap(a);
        return 0;
    }
    //输入三个数字 啊a  b  c  c为步长
    按顺序 输出 a到b的数组 步长为c  例如
     1 3   1   输出:1 2 3
    #include <stdio.h>
    void swap(int a, int b, int c)
    {
        int i=0;
        if(a>b)
        {
            for(i=a;i>=b;){
                printf("%d",i);
               i-=abs(c);
             }
        }
        else
        {
            for(i=a;i<=b;)
            {
                printf("%d",i);
                i+=abs(c);
            }
        }
    }
    int main( void)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        swap(a,b,c);
        return 0;
    }
    //1元钱能买一瓶汽水,喝完后n个空瓶可以换一瓶汽水。实现一个函数,传递一个整形的钱数m,一个整形的兑换比例n,返回最多能喝到的汽水数,并在main函数里将返回值输出。
    #include <stdio.h>
    int  swap(int x, int y)
    {
        int a,sum = x;
        a=x;
        for (;(a/y)>0 ; ) {
            
                sum+=a/y;
                a=a/y+a%y;
        }
        //sum=sum-a%y;
        return sum;
    }
    int main( void)
    {
        int a,b;
        scanf("%d%d",&a,&b);
       
        printf("%d",swap(a,b));
        return 0;
    }
    //n的末尾的0
    的个数
    #include <stdio.h>//算法思想 是 把每个因数分解 计算因数中含有5的个数  5的个数就是结果
    int Sum(const int n)
    {
    if(n<5) return 0;
    int counter=0,i;
    for(i=5;i<=n;i++){
    int flag=i;
    while(flag%5==0)
    {
    flag/=5;
    counter++;
    }
    }
    return counter;
    }
    int main( void)
    {
    int a;
    scanf("%d",&a);
    int b=Sum(a);
    printf("%d",b);
    return 0;
    }
    //魔幻方阵  就是 横竖斜 相加数值都相等
    #include"stdio.h"
    void main()
    {
    int a[15][15]={};
    int n,i,j,k,p,q;
    scanf("%d",&n);
    i=0;
    j=(n/2);
    a[i][j]=1;
    for(k=2;k<=n*n;k++)
    {
    p=i;
    q=j;
    i--;
    j++;
    if(i<0)
    i=n-1;
    if(j>n-1)
    j=0;
    if(a[i][j]!=0)
    {
    i=p+1;
    j=q;
    }
    a[i][j]=k;
    }
    for(i=0;i<n;i++)
    {
    for(j=n-1;j>=0;j--)
    printf(" %3d ",a[i][j]);
    printf(" ");
    }
    }
    //字符统计  输入不限个数数字 进行升序排序
    、//跳出循环用数字与数字中间的空格判断 如果是 就跳出循环
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
        
        int array[]={};
        int i,j,x=0,k;
        char c;
           for(i = 0 ; ; i++){
            scanf("%d%c",&x,&c);
             array[i] = x;
            if(c == ' ')
                break;
        }
        for (j=0; j<=i; j++) {
            for (x=0; x <= i-j-1; x++) {
                if (array[x]>array[x+1]) {
                int s=array[x]+array[x+1];
                    array[x]=s-array[x];
                     array[x+1]=s-array[x];
                }
            }
        }
        for (k = 0;k <= i ; k ++) {
             printf("%d",array[k]);
        }
    return 0;
    }
    //围圈报数  输入 4     8   
    输出   1  2  3 4
               0  0  0 5
               0  0  0 6
               0  0  8 7
    #include<stdio.h>
    #include<stdlib.h>
    int main(void){
        int **a,i,j,x,y,n,k;
        scanf("%d%d",&n,&k);
        a = (int**) malloc(sizeof(int*)*n);
        for(i=0; i<n; i++)
            a[i]=(int*)malloc(sizeof(int)*n);
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
            a[i][j]=0;
        for(i=1,j=0,x=0,y=0; i<=n*n; i++) {
            a[x][y]=i;
            switch (j) //j 为前进方向,0向右,1向下,2向左,3向上。
            {
                case 0:
                    if(y+1>n-1|| a[x][y+1]!=0) {j=1;x++;}
                    else y++;
                    break;
                case 1:
                    if(x+1>n-1 || a[x+1][y]!=0){j=2;y--;}
                    else x++;
                    break;
                case 2:
                    if(y == 0 || a[x][y-1]!=0){j=3; x--;}
                    else y--;
                    break;
                case 3:
                    if(a[x-1][y]!=0){j=0; y++;}
                    else x--;
                    break;
            }
        }
        for(i=0;i<n;i++) {
            for(j=0;j<n;j++)
                if(a[i][j]<=k)
                    printf("%4d",a[i][j]);
                else
                    printf("%4d",0);
            printf(" ");
            free(a[i]);
        }
        free(a);
        return 0;
    }
    //报数问题   n 个人  报数 报道i 那个人就退出 然后下个人从1开始报 知道一个人为止  求最后一个人的 号码


    #include <stdio.h>
    int main(int argc, const char * argv[])
    {

        // insert code here...
        int num[100] = {};
        int a , b , i ,c ;
        scanf("%d%d" , &a , &b);
        for (i = 0 ; i < a; i ++) {
            num[i]=1;//有人为1 没人为0
        }
            int count=0;//统计报数
            c=a;
            for (i=0,count=0; a > 1 ; i ++) {
                
                if (num[i] == 1) {
                    count++;
                        if(count == b)
                        {
                            a--;
                            num[i]=0;
                            count=0;
                        }
              }
                if(i == c-1) // 循环的范围是   小于人的个数
                    i = -1;
            }
                for (i = 0; i < c;  i ++) {
                    if (num[i] == 1) {//输出最后一个人的 号码
                        printf("%d",i+1);
                    }
                }
        return 0;
    }
    //小明一次可以爬一级或者二级台阶  试问n级台阶  小明来走共有几种走法   
    #include<stdio.h>
    int fun(int red,int n,char temp[],int k)
    {
        int i,j;
        static int sum=0;
        if(red==0)
        {
            for(i=1;i<=n;++i)
            {
                //printf("y");
            }
            //printf(" ");
            sum++;
        }
        else if(n==red)
        {
            for(i=1;i<=red;++i)
            {//  printf("r");
            }
            //printf(" ");
            sum++;
        }
        else
        {
            //printf("r");
            temp[k++]='r';
            fun(red-1,n-1,temp,k);
            k--;
            for(j=0;j<k;j++)
            { // printf("%c",temp[j]);
            }
            //printf("y");
            temp[k++]='y';
            fun(red,n-1,temp,k);
            k--;
        }
        return sum;
    }int main()
    {
        int n,k,i,d,s=0;
        char temp[100];
        scanf("%d",&n );
        for (i=0; i <= n/2; i++) {
            
                    k = n - 2 * i;
                    d=i+k;
                    s = fun (i,d,temp,0);
                }

        
        printf("%d",s);
        return 0;
    }
                                                                                                                                                                                              
    比如:
    输入:F
    输出:
    FEDCBA
     EDCBAB
      DCBABC
       CBABCD
        BABCDE
         ABCDEF


    #include<stdio.h>
    int main(void)
    {
        char i, j , k ,sum=0;;
        int  count=0;
        scanf("%c",&k);
        sum =  k - 'A'+1;
       // printf("%d",sum);
        for (i = k ; i >= 'A' ; i --) {
            count = 0;
            for (j = i ; j >= 'A' ; j --) {
                printf("%c",j);
                count++;
                 if(count == sum)
                    break;
            }
            j++;
            for (j++; ; j++) {
                if (count == sum)
                    break;
                printf("%c",j);
                count++;
                
            }
            printf(" ");
        }
        return 0;
    }
    //二维数组村字符串
    用一维指针字符数组来存二维字符数组
    #include<stdio.h>
    #include<stdlib.h>
    int main(void)
    {
    char *n[90];
    int i;
    for (i = 0; i < 90; i ++){
    n[i]=(char*)malloc(sizeof(char)*50);//动态申请字符的空间
    scanf(“%s”,n[i]);//每个字符串
    }
    for (i=90; i>= 0; i --) {
    if(n[i])//如果不为null 那么输出
    printf("%s",n[i]);
    }
    return 0;
    }
    //输入不定数 数组  来排序
    //scanf 与getchar 区别  getchar只会接受字符
    scanf(%d,a)只读取数字 留下空格 和回车 每次只读取一个数字
    #include <stdio.h>
    int main(int argc, const char * argv[])
    {
        int a[100] = {};
        
        int n = 0;
        int i = 0;
        
        printf("请输入数字以空格分隔开,以回车结束: ");
        
        do
        {
            scanf("%d", &n);//读取数字 下个字符是空格正好给了getchar   最后一个是回车 正好给getchar读取    跳出循环
            a[i] = n;
            i++;
        }
        while (getchar() != ' ');
        
        for (int j = 0; j < i ; j++)
        {
            printf("%d ", a[j]);
            printf(" ");
        }
        
        return 0;
        
    }

    //指针 排序数组   数组个数不限
    void desc( int *a ,int n)
    {
        int *i = a,*j = i+ 1,temp,   x= 0,  * k = a + n ;//i是数组初始地址 temp是 变量 k是数组结束地址
      //  printf("%d",*k);
        for ( x = 0; x < n ;x ++ )
        {
            for (  i = a ; i < k - 1 - x ; i ++)
                {
                    j= i + 1;//i   与j   是地址  k也是地址
                        if ( *i  >  *j )//*i是 *i指向的  数值
                        {
                            temp = *i;
                            *i = *j;
                            *j = temp;
                        }
               }
        }
    }
    int main(void)
    {
        void desc(int *num, int n);
        int num[10];
        int i = 0, k = 0;
        do{
            scanf("%d",&num[i]);
            i++;
        }while(getchar()!= ' ');
        desc(num, i);
        for (k=0; k < i;  k ++) {
            printf("%d",num[k]);
        }
        return 0;
    }
    //定义一个一维字符指针数组,并利用不定长字符串将其初始化,最后一段字符串以‘@’结尾,然后将各字符串输出。
    比如:
    输入:
    abc
    ddde
    abce@


    #include<stdio.h>
    #include<stdlib.h>
    int main(void)
    {
    char *n[10];
    char p [100][20];

    int i = 0 , j , k1 = 0, k2 , k3;
    for (i = 0; i < 10; i ++){
    n[i]=p[i];
    scanf("%s",n[i]);
    for (j = 0; j < 20; j ++) {
    if(n[i][j] == '@'){
    k1=1;
    k3=j;
    break;
    }
    }
    if (k1 == 1 ) {
    break;
    }
    }
    for (k1 = 0; k1 < i; k1 ++) {
    printf("%s",n[k1]);
    }
    for (k2 = 0; k2 < k3; k2 ++) {
    printf("%c",n[k1][k2]);
    }
    return 0;
    }

    just for 10k now do it just do it I believe I can I do ....
  • 相关阅读:
    LeetCode() Rotate Image
    LeetCode() Sort Colors
    LeetCode() Spiral Matrix
    LeetCode() Find Minimum in Rotated Sorted Array
    LeetCode(169)Majority Element and Majority Element II
    LeetCode(88) Merge Sorted Array
    LeetCode(283) Move Zeroes
    sql临时表和表变量
    自增长字段自定义
    [转]作者:朱 茂海 CentOS安装iRedMail web邮件服务器
  • 原文地址:https://www.cnblogs.com/fgyqbs/p/3840416.html
Copyright © 2011-2022 走看看