//1. (**)随机产生20个[10 , 100]的正整数,输出这些数以及他们中的最大数
    {
        int max = 10, num;
        printf("随机产生20个[10 , 100]的正整数:");
        for (int i = 1; i <= 20; i++) {
            num = arc4random() % (1000 - 10 + 1) + 10;
            printf("%d ", num);
            max = num > max ? num : max;
        }
        printf("\n最大数为:%d\n", max);
    }
//2. (**)编程将所有“水仙花数”打印出来,并打印其总个数。 “水仙花数”是一个 各个位立方之和等于该整数的三位数。
    {
        int count, a, b, c;
        for (int i = 100; i < 1000; i++) {
            
            a =  i / 100;
            b =  i % 100/ 10;
            c =  i % 10;
            if (i == a * a * a + b * b * b + c * c * c) {
                printf("%d ",i);
            }
            count++;
        }
    }
//3. (**)已知abc+cba = 1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合
    {
        printf( "a,b,c所有组合为:");
        for (int a = 0; a < 10; a++) {
            for (int b = 0; b < 10; b++) {
                for (int c = 0; c < 10; c++) {
                    if(a * 100 + b * 10 + c + c * 100 + b * 10 + a == 1333){
                        printf("%d%d%d ",a ,b ,c);
                    }
                }
            }
        }
        printf("\n");
    }
//4. (***)输入两个数,求最大公约数和最小公倍数。(用两种方法:辗转相除法和普通方法)
//求最大公约数,辗转相除法:
    {
        int i, j, a, b, count, m;
        printf("请输入两个数:");
        scanf("%d%d",&a,&b);
        i = a;
        j = b;
        while (i % j != 0) {
            m = i % j;
            i = j;
            j = m;
            count++;
        }
        printf("最大公约数为:%d,计算次数为:%d。\n", j, count);
        printf("最小公倍数为:%d\n",a * b / j);
    }
    
//普通方法:
    {
        int a, b, i;
        printf("请输入两个数:");
        scanf("%d%d",&a,&b);
        int num = a >= b ? b : a;
        for ( i = num ; i > 0; i--) {
            if (a % i == 0 && b % i == 0) {
                printf("最大公约数为:%d\n",i);
                break;
            }
        }
        printf("最小公倍数为:%d\n",a * b / i);
    }
//5.	(***)一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高
    {
        float high = 100,sum = 100;int down = 0;
        while (down < 10) {
            high = high / 2;
            sum += high * 2;
            down ++;
        }
        sum -= high*2;
        printf("第10次落地时,共经过%.2f米\n",sum);
        printf("第10次反弹高度为:%.2f米\n",high);
    }
    
//6. (****)输入n,分别用*输出边长为n的实心菱形和空心菱形。
//    实心菱形:
    {
        int n, j, m, num;
        printf("请输入一个数:");
        scanf("%d",&n);
        for (int count = 1; count <= 2 * n - 1; count++) {
            num  = (count > n ) ? (2 * n - count ): count ;
            j = n - num;//空格
            m = 2 * n - 1 - j * 2;//星星
            for (int i = 1 ; i <= j ; i++ ) {
                printf(" ");
            }
            for (int i = 1; i <= m; i++) {
                printf("*");
            }
            printf("\n");
        }
    }

//   空心菱形:
    {
        int n, j, m, num ;
        printf("请输入一个数:");
        scanf("%d",&n);
        for (int count = 1; count <= 2 * n - 1; count++) {
            num  = (count > n ) ? (2 * n - count): count ;
            j = n - num;//空格
            m = 2 * n - 1 - j * 2;//星星
            for (int i = 1 ; i <= j ; i++ ) {
                printf(" ");
            }
            for (int i = 1; i <= m; i++) {
                if (i == 1 || i == m) {
                    printf("*");
                }
                else{
                    printf(" ");
                }
            }
            printf("\n");
        }
    }