首页 > 代码库 > c语言数组问题解析

c语言数组问题解析

#import <Foundation/Foundation.h>

#define COUNT 10


int main(int argc, const char * argv[])

{

    //1、随机产生20[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和。第二大值。

//    int max = 0, min = 0, sum = 0, secondMax = 0;

//    float ave = 0.0;

//    int a[20] = {0};

//    //给数组元素赋值

//    for (int i = 0; i < 20; i++) {

//        a[i] = arc4random() % (50 - 10 + 1) + 10;

//        printf("%d ", a[i]);

//    }

//    printf("\n");

//    //求数组元素的最大值以及第二大值

//    for (int i = 0; i < 20; i++) {

//        if (a[i] > max) {

//            secondMax = max;

//            max = a[i];

//        } else if (a[i] != max && a[i] > secondMax) {

//            secondMax = a[i];

//        }

//    }

//    min = a[0];

//    //求数组元素的最小值

//    for (int i = 1; i < 20; i++) {

//        if (a[i] < min) {

//            min = a[i];

//        }

//    }

//    //求数组元素的和

//    for (int i = 0; i < 20; i++) {

//        sum += a[i];

//    }

//    ave = sum / 20.0;

//    printf("max = %d, min = %d, secondMax = %d, sum = %d, ave = %.2f\n", max, min, secondMax, sum, ave);

    

    //2.编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。

//    char str[255] = {0};

//    printf("请输入一个字符串:\n");

//    scanf("%[^\n]", str);

////    gets(str);

//    int maxLength = 0, maxIndex = 0;

//    int length = 0;

//    int i = 0;

//    while (str[i] != ‘\0‘) {

//        if (str[i] != ‘ ‘) {

//            length++;

//        } else {

//            if (maxLength < length) {

//                maxLength = length;

//                maxIndex = i - maxLength;

//            }

//            length = 0;

//        }

//        i++;

//    }

//    if (maxLength < length) {

//        maxLength = length;

//        maxIndex = i - maxLength;

//    }

//    for (int j = maxIndex; j < maxIndex + maxLength; j++) {

//        printf("%c", str[j]);

//    }

    

    //3、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:123123...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。

//    int a[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};

//    int number = 13; //记录圈内剩余的人数

//    int count = 0; //通过计算器来模拟报数

//    int i = 0; //循环变量

//    while (number > 1) {

//        if (a[i] != 0) {

//            count++;

//        }

//        if (count == 3) {

//            a[i] = 0;  //让该元素置0,模拟踢出圈子

//            count = 0; //然后计数器重新归0

//            number--;  //踢出圈子之后人数-1

//        }

//        i++;

//        if (i == 13) {

//            i = 0; //当到最后一个人的时候, 再转到第一个人继续报数

//        }

//    }

//    for (int j = 0; j < 13; j++) {

//        if (a[j] > 0) {

//            printf("叛徒就是第%d个人.", a[j]);

//        }

//    }

    

    //4.将两个排好序的数组,合并到另外一个数组中,并且合并之后的数组也是有序的。

    int a[10] = {0};

    int b[10] = {0};

    int c[20] = {0};

    //给数组a赋值

    for (int i = 0; i < 10; i++) {

        a[i] = arc4random() % (40 - 20 + 1) + 20;

    }

    //给数组b赋值

    for (int i = 0; i < 10; i++) {

        b[i] = arc4random() % (40 - 20 + 1) + 20;

    }

    //将数组a排序

    for (int i = 0; i < 10 - 1; i++) {

        for (int j = 0; j < 10 - 1 - i; j++) {

            if (a[j] > a[j + 1]) {

                int temp = a[j];

                a[j] = a[j + 1];

                a[j + 1] = temp;

            }

        }

    }

    //将数组b排序

    for (int i = 0; i < 10 - 1; i++) {

        for (int j = 0; j < 10 - 1 - i; j++) {

            if (b[j] > b[j + 1]) {

                int temp = b[j];

                b[j] = b[j + 1];

                b[j + 1] = temp;

            }

        }

    }

    //输出数组a

    for (int i = 0; i < 10; i++) {

        printf("%d ", a[i]);

    }

    printf("\n");

    //输出数组b

    for (int j = 0; j < 10; j++) {

        printf("%d ", b[j]);

    }

    printf("\n");

    //将数组a和数组b合并到数组c

    int i = 0, j = 0, k = 0;

    while (i < 10 && j < 10 ) {

        if (a[i] > b[j]) {

            c[k++] = b[j++];

        } else {

            c[k++] = a[i++];

        }

    }

    while (i < 10) {

        c[k++] = a[i++];

    }

    while (j < 10) {

        c[k++] = b[j++];

    }

    //输出排序好的数组c

    for (int m = 0; m < 20; m++) {

        printf("%d ", c[m]);

    }

    

    //5.有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。

//    int element = 2, demo = 1;

//    int n = 0;

//    float sum = 2.0;

//    printf("请输入求前几项的和:\n");

//    scanf("%d", &n);

//    int temp = 0;

//    for (int i = 1; i < n; i++) {

//        temp = element;

//        element = element + demo;

//        demo = temp;

//        sum += element * 1.0 / demo;

//    }

//    printf("sum = %.2f\n", sum);

    

    //6.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

//    int number = 0;

//    printf("请输入一个不多于5位的正整数:\n");

//    scanf("%d", &number);

//    int count = 0;

//    int copyNumber = number;

//    while (copyNumber) {

//        count++;

//        copyNumber /= 10;

//    }

//    printf("%d\n", count);

//    for (int i = 0; i < count; i++) {

//        printf("%d", number % 10);

//        number /= 10;

//    }

    

    //7.,一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

//    int number = 0;

//    printf("请输入一个数:\n");

//    scanf("%d", &number);

//    int count = 0;

//    //先求出数字的位数

//    int copyNumber = number;

//    while (copyNumber) {

//        count++;

//        copyNumber /= 10;

//    }

//    int temp = 1;

//    for (int i = 0; i < count - 1; i++) {

//        temp *= 10;

//    }

//    BOOL isTrue = YES;

//    copyNumber = number;

//    for (int i = 0; i < count / 2; i++) {

//        int higher = number / temp;

//        int lower = number % 10;

//        if (higher != lower) {

//            isTrue = NO;

//            break;

//        }

//        number %= temp;

//        number /= 10;

//        temp /= 100;

//    }

//    if (isTrue) {

//        printf("%d是回文数", copyNumber);

//    } else {

//        printf("%d不是回文数", copyNumber);

//    }

    //8.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

//    char letter = 0;

//    printf("请输入第一个字母:\n");

//    scanf("%c", &letter);

//    switch (letter) {

//        case ‘M‘:

//            printf("Monday");

//            break;

//        case ‘T‘:

//        {

//            rewind(stdin); //清除缓冲区

//            //getchar(); 或者取出一个字符丢弃,丢弃的是\n

//            printf("请再输入第二个字符:\n");

//            scanf("%c", &letter);

//            switch (letter) {

//                case ‘h‘:

//                    printf("Thursday");

//                    break;

//                case ‘u‘:

//                    printf("Tuesday");

//                    break;

//                default:

//                    break;

//            }

//        }

//        case ‘W‘:

//            printf("Wednesday.");

//            break;

//        case ‘F‘:

//            printf("Friday");

//            break;

//        case ‘S‘:

//        {

//            rewind(stdin); //清除缓冲区

//            //getchar(); 或者取出一个字符丢弃,丢弃的是\n

//            printf("请再输入第二个字符:\n");

//            scanf("%c", &letter);

//            switch (letter) {

//                case ‘a‘:

//                    printf("Saturday");

//                    break;

//                case ‘u‘:

//                    printf("Sunday");

//                    break;

//                default:

//                    break;

//            }

//        }

//        default:

//            break;

//    }

    

    //9.1000000个数,每个数取值范围是0-999999

    //找出其中重复的数,重复次数。

    //第一种方式

//    int a[COUNT] = {0};

//    int number = 0;

//    for (int i = 0; i < COUNT; i++) {

//        number = arc4random() % COUNT;

//        printf("%d ", number);

//        a[number]++;

//    }

//    printf("\n");

//    for (int i = 0; i < COUNT; i++) {

//        if (a[i] > 1) {

//            printf("%d : %d\n", i, a[i]);

//        }

//    }

    //第二种形式

//    int a[COUNT] = {0};

//    for (int i = 0; i < COUNT ; i++) {

//        a[i] = arc4random() % COUNT;

//        printf("%d ", a[i]);

//    }

//    printf("\n");

//    int temp = 0; //临时变量,用来存储取出来的数

//    int count = 1; //记录重复的个数

//    for (int i = 0; i < COUNT; i++) {

//        temp = a[i];

//        for (int j = i + 1; j < COUNT; j++) {

//            if (a[j] == -1) {

//                continue;

//            }

//            if (a[j] == temp) {

//                count++;

//                a[j] = -1; //将已经计算过的数置为-1.

//            }

//        }

//        if (count > 1) {

//            printf("%d : %d\n", temp, count);

//            count = 1;

//        }

//    }

    return 0;

}



本文出自 “漠北” 博客,请务必保留此出处http://wsx199312.blog.51cto.com/9168392/1440767

c语言数组问题解析