玩转C语言数组各种算法小结

来源:互联网 发布:大数据公司销售好干吗 编辑:程序博客网 时间:2024/04/28 14:30
#include <stdio.h>#define N 10//7、对称//typedef enum {//    false,//0//    true  //1//}bool;//bool isSymmetryArray(int a[], int len);//bool isSymmetryArray(int a[], int len)//{//    for (int i=0; i<len/2; i++) {//        if (a[i]!=a[len-i-1]) {//            return false;//        }//    }//    return true;//}int main(int argc, const char * argv[]) {//    z1. 数组(求最大值及下标)定义一个整型数组,输入10个整数到数组中,并将数组中最大值及下标输出。12345//    例如://    输入: 3 5 2 9 1 8 7 4 6 0//    输出: 9 3//    //        int array[10],max,index,temp;//        printf("输入10个数给数组赋值:");//        for (int i=0; i<10; i++) {//            scanf("%d",&array[i]);//        }//        max=array[0];//        index=0;//        for (int i=1; i<10; i++) {//            if (max<array[i]) {//                temp=max;//                max=array[i];//                array[i]=temp;//                index=i;//            }//        }//        printf("%d %d",max,index);//    //    //    2.有一个数组b[5] = {1,2,3,4,5};把这个数组拷贝到另外一个数组int a[5]中//    //    //        int b[5] = {1,2,3,4,5};//        int a[5];//        printf("复制以后a[i]输出:");//        for (int i=0; i<5; i++) {//            a[i]=b[i];//            printf("%d ",a[i]);//        }//    //    //    3. 字符数组(正序输出)定义一个字符数组,输入10个字符到数组中,将字符数组内容逐个输出。//    输入:A B C D E F G H I J//    输出:A B C D E F G H I J//    //        char array[10];//        int i;//        printf("输入10个字符给数组赋值:");//        for (i=0; i<10; i++) {//            //scanf("%c",&array[i]);//            array[i]=getchar();//        }//        //printf("\n");//        for (i=0; i<10; i++) {//            printf("%c ",array[i]);//        }//    //    4. 字符数组(逆序输出)定义一个字符数组,输入10个字符到数组中,将字符数组内容倒序输出//    输入:a b c d e f g h i j//    输出:j i h g f e d c b a//    //    //        char array[10];//        int i;//        printf("输入10个字符给数组赋值:");//        for (i=0; i<10; i++) {//            //scanf("%c",&array[i]);//            array[i]=getchar();//        }//        //printf("\n");//        for (i-=1; i>=0; i--) {//            printf("%c ",array[i]);//        }//    //    //    5.输入十个正整数,把这十个数按由小到大的顺序排列//    //    //        int num[10];//        int i,temp=0;//        printf("输入10个正整数:");//        for (i=0; i<10; i++) {//            scanf("%d",&num[i]);//        }//        for (i=0; i<10; i++) {//            for (int j=0; j<10-i-1; j++) {      //冒泡排序//                if (num[j]<num[j+1]) {//                    temp=num[j];//                    num[j]=num[j+1];//                    num[j+1]=temp;//                }//            }//        }//        for (i=0; i<10; i++) {//            printf("%d ",num[i]);//        }//    //    //        int num[N];//        printf("输入%d个整数:",N);//        for (int i=0; i<N; i++) {//            scanf("%d",&num[i]);//        }//        int temp;//        for (int i=0; i<N; i++) {//            //内循环    每一次比较的过程,循环结束找到一个最小的数字//            for (int j=0; j<N-1-i; j++) {  //每循环一次确定一个数字//                if (num[j]<num[j+1]) {//                    temp=num[j];//                    num[j]=num[j+1];//                    num[j+1]=temp;//                }//            }//        }//        printf("数组降序排列为:\n");//        for (int i=0; i<N; i++) {//            printf("%d ",num[i]);//        }//        printf("\n");//    //    //    //    6.给定一个有10个整数的元素,将前5个元素跟后5个元素做整体交换,比如{1,1,1,1,1,2,3,2,2,2}->{2,3,2,2,2,1,1,1,1,1}//    //    //        int array1[10]={1,1,1,1,1,2,3,2,2,2},array2[10];//        for (int i=0,j=5; i<5&&j<10; i++,j++) {//            array2[i]=array1[j];//            array2[j]=array1[i];//        }//        for (int j=0; j<10; j++) {//            printf("%d ",array2[j]);//        }//    //    //    //    7.判断一个整型数组是否是对称数组,例如{1,2,3,3,2,1}和{1,6,8,1,8,6,1}都是对称数组//    //    //    int a[]={1,2,3,1,2};//        int b[]={1,1,2,3,3,2,1,1};//        if(isSymmetryArray(b,8)==true){//            printf("duichen");//        }else{//            printf("buduichen");//        }//    //    //    //    8.给定一个10个元素的整型数组,现在将第2个元素删除,后面的数组顺序前移//    //        int a[10]={1,2,3,4,5,6,7,8,9,0},i;//        for (i=1; i<9; i++) {//            a[i]=a[i+1];//        }//        for (i=0; i<10; i++) {//            printf("%d ",a[i]);//        }//    //    //    9.给定一个整型数组,求该数组中第二大的数的下标//    //    //        int a[N]={1,2,3,4,5,6,7,8,9,0};//        int max=0,secMax=0,i,j;//最大值,第二大值,变量,储存第二大数下标//        for (i=0; i<N; i++) {//            if (a[i]>max) {//                max=a[i];//            }//        }//        for (i=0; i<N; i++) {//            if (a[i]>secMax && a[i]<max) {//                secMax=a[i];//                j=i;//            }//        }//        printf("第二大数:%d 其下标为:%d\n",secMax,j);//    //    //    10.给定一个整型数组,计算大于该数组平均值的元素的个数//    //    //        int a[N]={1,2,3,4,5,6,7,8,9,0};//        int sum=0,avg=0;//所有数的和,平均数//        int num=0;//大于平均数个数//        int i;//        for (i=0; i<N; i++) {//            sum+=a[i];//        }//        avg=sum/N;//        for (i=0;i<N; i++) {//            if (a[i]>avg) {//                num++;//            }//        }//        printf("该数组中大于平均数的个数为:%d\n",num);//    //    //    11.给定一个整型数组,找到数组中的最小值,并将其放到数组的首元素中,原来首元素的内容放到最小值所在的元素中//    //    //        int a[N]={1,2,3,4,5,6,7,8,9,0};//        int min=a[0],m=0;//最小值,最小值下标//        int i;//        for (i=1; i<N; i++) {//            if(a[i]<min){//                min=a[i];//                m=i;//            }//        }//        int temp;//交换变量//        temp=a[0];//        a[0]=a[m];//        a[m]=temp;//        for (i=0; i<N; i++) {//            printf("%d ",a[i]);//        }//        printf("\n");//    //    //    12.给定一个整型数组,统计某个整数在数组中出现的次数//    //    //        int a[N]={1,2,1,4,5,6,1,8,9,0};//        int n=1,num=0,i;//某个整数,出现的个数//        for (i=0; i<N; i++) {//            if (a[i]==n) {//                num++;//            }//        }//        printf("%d出现的次数为:%d\n",n,num);//    //    //    13.将一个字符数组循环右移2位。比如”12345”->”45123”,假定字符数组中字符的数量大于2//    //    //    int a[N]={1,2,3,4,5,6,7,8,9,0},b[N];//    int i,j;//取出前两个数的值//    //    for (i=0; i<2; i++) {//        b[i]=a[N-2+i];//    }//    for (i=2,j=0; i<N; i++) {//        b[i]=a[j];//        j++;//    }//    for (i=0; i<N; i++) {//        printf("%d ",b[i]);//    }//    //    //    14.给定某个拥有5个元素的字符数组,数组的成员都有阿拉伯字符构成,试着将该数组转换成一个整数,比如字符数组的内容是:{‘1’,’2’,’3’,’3’,’2’} 则将被转换成12332//    //    //        char ch[5]={'1','2','3','4','5'};//        int in[5];//        int i,j;//        for (j=0; j<5; j++) {//            in[j]=ch[j]-'0';//        }//        for (i=0; i<5; i++) {//            printf("%d ",in[i]);//        }//    //    //    15.通过终端输入10个整数并将其保存在一个整型数组中,数字保存在数组中的顺序与下标正好相反,也就是第一个被输入的数放在数组最后一个元素中,最后一个输入的数字放到第一个元素中//    //    int num[N];//    int i,j;//    printf("输入10个整数:");//    for (i=N-1; i>=0; i--) {//        scanf("%d",&num[i]);//    }//    for (j=0; j<N; j++) {//        printf("%d ",num[j]);//    }//    printf("\n");//    //    //    16.  给定一个5个元素构成的整型数组,每个元素的值都在0-9之间,按照位置将其组成一个5位数并输出,例如int a[5] = {1,2,2,3,7};则输出73221//    //    int m=5;//    int num[m],n=0;//    int i,j;//    static int x=10;//    printf("输入5个数(0~9):");//    for (i=0; i<m; i++) {//        scanf("%d",&num[i]);//    }//    n=num[0];//    for (j=1; j<m; j++) {//        //        n=n+(num[j]*x);//        x=x*10;//    }//    //    printf("%d\n",n);//    //    //    17. 给定一个整型数组,从第1个元素开始将相邻的两个元素分别相互交换。交换完后,第1个元素将变成最后一个元素,其余元素都前进一位//    //    int m=4;//    int n1[m],n2[m],i,j;//    printf("输入%d个数给数组赋值:",m);//    for (i=0; i<m; i++) {//        scanf("%d",&n1[i]);//    }//    for (i=0,j=1; i<=m-2; i++) {//        n2[i]=n1[j];//        j++;//    }//    n2[m-1]=n1[0];//    for (i=0; i<m; i++) {//        printf("%d ",n2[i]);//    }//    //    //    18. 编写函数将一个n*n矩阵转置,例如:(****)//    1 2 3 4     1 5 3 4//    5 6 7 8 ->  2 6 2 7//    3 2 5 9     3 7 5 2//    4 7 2 3     4 8 9 3////    const int n=4;//    int num1[n][n]={{1,2,3,4},{5,6,7,8},{3,2,5,9},{4,7,2,3}};//    int num2[n][n],i,j;//    for (i=0; i<n; i++) {//        for (j=0; j<n; j++) {//            num2[i][j]=num1[j][i];//        }//    }////    for (i=0; i<n; i++) {//        for (j=0; j<n; j++) {//            printf("%d ",num2[i][j]);//        }//        printf("\n");//    }//    //    //    //    19.//    // 杨辉三角  输入n打印一个n行的杨辉三角//    1//    1 1//    1 2  1//    1 3  3  1//    1 4  6  4  1//    1 5 10 10  5 1//    1 6 15 20 15 6 1//    //    //    int n,i,j;//    int triangle[100][100]={};//    printf("输入n:");//    scanf("%d",&n);//    for (i=0; i<n; i++) {//        for (j=i; j>=0 ; j--) {//            if (i==0 || j==0) {//                triangle[i][j]=1;//            }else{//                triangle[i][j]=triangle[i-1][j-1]+triangle[i-1][j];//            }//        }//    }//    for (i=0; i<n; i++) {//        for (j=i; j>=0; j--) {//            printf("%d ",triangle[i][j]);//        }//        printf("\n");//    }//    //    //    20.给某个整型数组赋值,赋值规律如下,下标能被3整除的都赋值为1,能被5整除的都赋值为2,能被7整除的都赋值为3,其余都赋值为0//    //    //    int m=22;//    int shuzu[m];//    int i;//    shuzu[0]=0;//    for (i=1; i<m; i++) {//        if (i%3==0 && i%7!=0) {//            shuzu[i]=1;//        }else if (i%5==0){//            shuzu[i]=2;//        }else if (i%7==0){//            shuzu[i]=3;//        }else{//            shuzu[i]=0;//        }//    }//    //    for (i=0; i<m; i++) {//        printf("%d ",shuzu[i]);//    }        return 0;}

原创粉丝点击