for循环

 

//    《第 03 讲:循环结构》

//    1. (*)有 10 亿元钱每天花一半,可以花多少天

    int day = 0;

    int dollar = 1000000000;

    while (dollar > 0) {

        dollar = dollar / 2;

        day++;

    }

    

    printf("day = %d" , day);

    

    

    

    

//    2. (**)随机产生 20 个[10 , 100]的正整数,输出这些数以及他们中的最大数

    

    int num = 0;

    int max = 0;

    int index = 0;

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

        num = (arc4random() % 91 + 10);

        printf("%d " , num);

        if (index == 0) {

            max = num;

        } else {

            if (max < num) {

                max = num;

            }

        }

        index++;

    }

    printf("\nmax = %d" , max);

    

    

    

    

//    3. (**)编程将所有“水仙花数”打印出来,并打印其总个数。“水仙花数”是一个各个位立方之和等于该整数的三位数。

//水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)

//  n = 3;

   

    int num = 0;

    int a = 0;

    int b = 0;

    int c = 0;

    for (num = 100; num <= 999; num++) {

        c = num/100;

        b = num/10%10;

        a = num%10;

        if (a*a*a + b*b*b + c*c*c == num) {

            printf("%d " , num);

        }

    }

    

//  n = 4

    

    int num = 0;

    int a = 0;

    int b = 0;

    int c = 0;

    int d = 0;

    for (num = 1000; num <= 9999; num++) {

        d = num/1000;

        c = num/100%10;

        b = num/10%10;

        a = num%10;

        if (a*a*a*a + b*b*b*b + c*c*c*c + d*d*d*d == num) {

            printf("%d " , num);

        }

    }

    

    

    

    

    

    

//    4.(**)已知 abc+cba = 1333,其中 a,b,c 均为一位数,编程求出满足条件的 a,b,c 所有组合

    

    for (int a = 0; a <= 9; a++) {

        for (int b = 0; b <= 9; b++) {

            for (int c = 0; c <= 9; c ++) {

                

                if ((a * 100 + b * 10 + c) + (c * 100 + b * 10 + a) == 1333) {

                    printf("a = %d , b = %d , c = %d" , a , b , c);

                    printf("\n");

                }

                

            }

        }

    }

    

    int m = 40 , n = 60;

    int a = m , b = n;

    

    while (n % m != 0) {

        int temp = n % m;

        n = m;

        m = temp;

    }

    printf("%d , %d\n" , m , a * b /m);

    

    

    

//    5. (***)输入两个数,求最大公约数和最小公倍数。(用两种方法:辗转相 除法和普通方法)

//    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数.

//    

//    求最小公倍数算法:

//    

//    最小公倍数=两整数的乘积÷最大公约数

//    

//    求最大公约数算法:

//    

//    (1)辗转相除法

//    

//    有两整数a和b:

//    

//    ① a%b得余数c

//    

//    ② 若c=0,则b即为两数的最大公约数

//    

//    ③ 若c≠0,则a=b,b=c,再回去执行①

//    

//    例如求27和15的最大公约数过程为:

//    

//    27÷15 余1215÷12余312÷3余0因此,3即为最大公约数

    

    

    int a , b , c , m , n;

    printf("输入");

    scanf("%d %d" , &a , &b);

    m = a;

    n = b;

    

    while (b != 0) {

        c = a % b;

        a = b;

        b = c;

        

    }

    printf("最大公约数: %d" , a);

    printf("最小公倍数: %d" , m * n / a);

    

    

    

//    ⑵ 相减法

//    

//    有两整数a和b:

//    

//    ① 若a>b,则a=a-b

//    

//    ② 若a<b,则b=b-a

//    

//    ③ 若a=b,则a(或b)即为两数的最大公约数

//    

//    ④ 若a≠b,则再回去执行①

//    

//    例如求27和15的最大公约数过程为:

//    

//    27-15=12( 15>12 ) 15-12=3( 12>3 )

//    

//    12-3=9( 9>3 ) 9-3=6( 6>3 )

//    

//    6-3=3( 3==3 )

//    

//    因此,3即为最大公约数

    

    

    

    int a = 0 , b = 0 , m = 0 , n = 0;

    printf("输入两个数:");

    scanf("%d%d" , &a ,&b);

    

    m = a;

    n = b;

    

    while (a != b) {

        

        if (a > b) {

            a = a - b;

        } else {

            b = b - a;

        }

        

    }

    printf("最大公约数:%d" , b);

    printf("\n最小公倍数:%d" , m * n / b);

    

    //普通法 先求最大公约数

    int a = 40 , b = 60;

    int max = a > b ? a : b;

    int min = a + b - max;

    

    int i = 1;

    int commonDivisior = 0;

    while (i <= min) {

        if ((max % i == 0) && (min % i == 0)) {

            commonDivisior = i;

        }

        i++;

    }

    printf("最大公约数:%d\n" , commonDivisior);

    

    //普通法 先求最小公倍数

    int a = 12 , b = 27;

    int min = 1 , num = 0;

    while (min >= 1) {

        if ((min % a == 0) && (min % b == 0)) {

            num = min;

            break;

        }

        min++;

    }

    printf("最大公约数为:%d" , num);

    

//    6. 求 n 个随机数里的最小值(如何表示产生随机数的第一个数?)

    

//    int n = 0;

//    int num = 0;

//    int min = 0;

//    //int min = 2147483647; //int最大值printf("%d\n", ~(unsigned int)0 / 2);

//    int index = 0;

//    printf("输入n = ");

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

//    

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

//        num = arc4random();

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

//        if (index == 1) {

//            min = num;

//        } else {

//            if (min > num) {

//                min = num;

//            }

//        }

//        index++;

//    }

//    

//    printf("\nmin = %d" , min);

//  

 

posted @ 2015-04-15 22:48  fengkuangIT  阅读(127)  评论(0编辑  收藏  举报