#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <time.h>
#include <ctype.h>

int main(void) {
    
//        *****练习****

//      输入一个年份,打印该年份是否是闰年。

//        int year;
//        printf("请输入年份:");
//        scanf("%d",&year);
//        if (year % 400 == 0 || (year % 4 == 0 && year % 100 !=0)) {
//            printf("%d 年是闰年",year);
//        }else{
//            printf("%d 不是闰年",year);
//        }


//      某商店对顾客购买货物款数满500元,超出部分减价10%,不足500元不予优惠,输入一个人款数,计算客户实交货款。

//        int payments;
//        float actualPayments;
//        printf("请输入货款金额(元):");
//        scanf("%d",&payments);
//        if (payments > 500) {
//            actualPayments = 500 + (1-0.1) * (payments-500);
//        }else{
//            actualPayments = 500;
//        }
//        printf("您实际应支付:%.2f 元 ",actualPayments);

//      从键盘输入一个字符,如果是数字打印 this is digital,如果是大写字母,打印 this is capital letter, 如果是小写字母, 打印 this is letter, 如果是其他字符,打印 other.

//        char x = 0;
//        printf("请输入一个字符:");
//        scanf("%c",&x);
//        if (x >= 'A' && x <= 'Z') {
//            printf("这是一个大写字符");
//        }else if (x >= 'a' && x <= 'z'){
//            printf("这是一个小写字符");
//        }else if (x >= '0' && x <= '9'){
//            printf("这是一个数字");
//        }else{
//            printf("这是其他字符");
//        }

//      铁路托运行李规定: 行李重不超过50公斤的,托运费按0.15元每公斤计算,如果超过50公斤,超过部分每公斤加收0.1元。编程实现上述功能。

//        float weight, fee;
//        printf("请输入行李重量(公斤):");
//        scanf("%f",&weight);
//        if (weight > 50) {
//            fee = 0.15 * weight + 0.1 * (weight - 50);
//        }else{
//            fee = 0.15 * weight;
//        }
//        printf("行李托运费为:%.2f 元",fee);

//        编制一个完成两个数四则运算程序。如:用户输入34+56则输出结果为90.00,要求运算结果保留两位有效小数,用户输入时将2个运算数以及运算符都输入。根据运算求结果。

//        printf("**这是一个简易计算器**\n");
//        int a,c;
//        float result;
//        char b;
//        printf("*请输入算式*\n");
//        scanf("%d%c%d",&a,&b,&c);
//        switch (b) {
//            case '+':
//                result = a + c;
//                break;
//            case '-':
//                result = a - c;
//                break;
//            case '*':
//                result = a * c;
//                break;
//            case '/':
//                result = a / c;
//                break;
//            default:printf("输入有误,请重新输入!");
//                break;
//        }
//        printf("结果 = %.2f",result);
/////////////////////////////////////////////
//        有3个整数a,b,c,由键盘输入,输出其中最大的数

//        int a,b,c;
//        printf("输入三个整数\n");
//        scanf("%d %d %d",&a,&b,&c);
//        if (a >= b) {
//            if (a >= c) {
//                printf("最大值为%d",a);
//            }else{
//                printf("最大值为%d",c);
//            }
//        }else if (b >= c){
//            printf("最大值为%d",b);
//        }else{
//            printf("最大值为%d",c);
//        }

//      有一个函数:x<1的时候,y = x; 1 <= x <10的时候,y = 2x-1; x >= 10的时候,y =3x-11.写一段程序,输入x,输出y值。

//        int x,y;
//        printf("输入x值\n");
//        scanf("%d",&x);
//        if (x < 1) {
//            y = x;
//        }else if (x < 10){
//            y = 2*x - 1;
//        }else{
//            y = 3*x - 11;
//        }
//        printf("y = %d",y);

//        计算1+2+3+4+...+99+100 的和

//        int sum;
//        for (int i = 1; i < 101; i++) {
//            sum += i;
//        }
//        printf("%d",sum);

//        计算100以内所有是13倍数的数字之和

//        int sum;
//        printf("100以内能被13整除的数有:");
//        for (int i = 1; i < 101; i++) {
//            if (i%13 == 0) {
//                sum += i;
//                printf("%d ",i);
//            }
//        }
//        printf("\n和为%d",sum);

//        打印9*9乘法表

//        for (int i = 1; i < 10; i++) {
//            for (int j = 1; j <= i; j++) {
//                printf("%d × %d = %2d ",j,i,i*j);
//            }
//            printf("\n");
//        }

//        打 印  1 - 100  中不能被7整除又不包含7的数。

//        for (int i = 1; i < 101; i++) {
//            if (i % 7 !=0 && i / 10 != 7 && i % 10 != 7) {
//                printf("%2d  ",i);
//            }
//        }

//        输入两个数,求最小公倍数和最大公约数。

//        int x = 0,y = 0,GCD = 0,LCM = 0;
//        scanf("%d %d",&x,&y);
//        for (int i = 1; i <= (x < y ? x : y); i++) {
//            if (x % i == 0 && y % i == 0) {
//                GCD = i;
//            }
//        }
//        LCM = x * y / GCD;
//        printf("最大公约数为%d,最小公倍数为%d",LCM,GCD);

//        随机产生20个[10,100]的正整数,输出这些数以及他们中的最大数。第二大数。

//        int max1 = 0,max2 = 0;
//        for (int i = 0; i < 20; i++) {
//            unsigned int randomNumber = arc4random()%91 + 10;
//            printf("%d ",randomNumber);
//            if (max1 < randomNumber) {
//                max2 = max1;
//                max1 = randomNumber;
//            }else if(max2 < randomNumber){
//                max2 = randomNumber;
//            }
//        }
//        printf("\n最大数是%d\n第二大数是%d",max1,max2);

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

//        for (int i = 1; i < 10; i++) {
//            for (int j = 0; j < 10; j++) {
//                for (int k = 0; k < 10; k++) {
//                    if (i*i*i + j*j*j + k*k*k == i *100 + j * 10 + k) {
//                        printf("%d ",i *100 + j * 10 + k);
//                    }
//                }
//            }
//        }

//        使用循环打印三角形
//
//        *****
//        _***
//        __*
//        _***
//        *****
//
//        (1) for (int i = 1; i < 3; i++) {
//            for (int k = 1; k < i; k++) {
//                printf("_");
//            }
//            for (int j = 5; j >= 2 * i - 1 ; j--) {
//                printf("*");
//            }
//            printf("\n");
//        }
//        for (int i = 1; i < 4; i++) {
//            for (int k = 3; k > i; k--) {
//                printf("_");
//            }
//            for (int j = 1; j <= 2 * i - 1 ; j++) {
//                printf("*");
//            }
//            printf("\n");
//        }
//        (2)打印  
//        *
//
//        * *
//
//        * * *
//
//        for (int i = 0; i < 3; i++) {
//            for (int k = 3; k > i + 1; k--) {
//                printf(" ");
//            }
//            for (int j = 0; j < 2 * i + 1; j++) {
//                if (j % 2 == 0) {
//                    printf("*");
//                }else{
//                    printf(" ");
//                }
//            }
//            printf("\n");
//        }
//
//
//
//        (3)  for (int i = 0 , a = 0 ,b = 2; i < 5; i++) {
//            for (int j = 0; j < a + 1; j++) {
//                printf("%3c",'*');
//            }
//            for (int j = 0; j < b * 2 - 1; j++) {
//                printf("%3c",' ');
//            }
//            for (int j = 0; j < (5 - abs((b * 2 - 1))) / 2; j++) {
//                printf("%3c",'*');
//            }
//            printf("\n");
//            if (i < 2) {
//                a++;
//                b--;
//            }
//            else{
//                a--;
//                b++;
//            }
//        }//****输出横着的漏斗


//        输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。\

//        char c = '\0';
//        int letter, space, number, other;
//        while (c != '\n') {
//            scanf("%c",&c);
//            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
//                letter ++;
//            }else if (c == ' '){
//                space ++;
//            }else if (c >= '0' && c <= '9'){
//                number ++;
//            }else{
//                other ++;
//            }
//        }
//        printf("英文字母 %d 个\n空格 %d 个\n数字 %d 个\n其他字符 %d 个",letter,space,number,other);




//        求S(n) = a+aa+aaa+aaaa+...+aa..a   之值,其中a 是一个数字,n 表示a的位数,例如 2+22+222+2222+22222(此时n+5),n和a 都从键盘输入。

//        int n,a,an = 0,sn;
//        printf("输入位数n,数字a\n");
//        scanf("%d %d",&n,&a);
//        for (int i = 0; i < n; i++) {
//            an = an * 10 + a;
//            sn += an;
//            if (i != n - 1) {
//                printf("%d + ",an);
//            }else{
//                printf("%d = ",an);
//            }
//        }
//        printf("%d\n",sn);
//
//
//        求1!+2!+3!+4!+...+20!
//
//        long sum1,an = 1;
//        for (int i = 1; i < 21; i++) {
//            an *= i;
//            sum1 += an;
//        }
//        printf("%ld\n",sum1);

//        一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹。求它在第10次落地时,工经过多少米?第10次反弹多高?

//        float height = 100,sum = 0;
//        for (int i = 0; i < 10; i++) {
//            sum += height * 2;
//            height = height / 2;
//        }
//        sum -= 100;
//        printf("经过的路径%f,第十次反弹高度%f (单位:m)\n",sum,height);

//        猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃了一半,又多吃一个。以后每天早上都吃掉前一天剩下的一半零一个。到第10天早上再想吃时,就只剩一个桃子了。求第一听共摘多少个桃子。


//        int x = 1;
//        for (int i = 10; i > 1; i--) {
//            x = (x + 1) * 2;
//        }
//        printf("第一次摘了%d个桃\n",x);


//        生成一个具有20个元素的数组,每个元素的取值范围是 30 ~ 70之间,求数组元素的和;

//        int a[20] = {0};
//        int sum = 0;
//        for (int i = 0; i < 20; i++) {
//            a[i] = arc4random()%41 + 30;
//            printf("%d ",a[i]);
//            sum += a[i];
//        }
//        printf("\n%d",sum);



//        复制一个数组,即两个数组容量一样,把其中一个数组的元素复制到另一个数组中。

//        int a[5] = {1,2,3,4,5},b[5] = {0};
//        for (int i = 0; i < 5; i++) {
//            b[i] = a[i];
//        }

//        生成2个数组,每个数组都有10个元素,元素取值范围 20 -40 之间,数组对应元数相加,放到另外一个数组中

//        int a[10] = {0},b[10] = {0},c[10] = {0};
//        for (int i = 0; i < 10; i++) {
//            a[i] = arc4random()%21 + 20;
//            b[i] = arc4random()%21 + 20;
//            c[i] = a[i] + b[i];
//            printf("%d + %d = %d\n",a[i],b[i],c[i]);
//        }

//        随机产生10个数,并对他们从小到大排序

//        int a[10] = {0};
//        for (int i = 0; i < 10; i++) {
//            a[i] = arc4random()%50;
//            printf("%d ",a[i]);
//        }
//        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;
//                }
//            }
//        }
//        printf("\n");
//        for (int i = 0; i < 10; i++) {
//            printf("%d ",a[i]);
//        }

//        查找字符串中的空格数:例如:"I love code, i want a new phone",,,有6个空格。。

//        int count = 0;
//        char str[40] = "I love code, i want a new phone";
//        for (int i = 0; i < strlen(str); i++) {
//            if (str[i] == ' ') {
//                count ++;
//            }
//        }
//        printf("%d",count );

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

//        int number[20] = {0};
//        int max = 0,min = 0,sum = 0;
//        for (int i = 0; i < 20; i++) {
//            number[i] = arc4random()%41 + 10;
//            printf("%d ",number[i]);
//            if (number[max] < number[i]) {
//                max = i;
//            }
//            if (number[min] > number[i]) {
//                min = i;
//            }
//            sum += number[i];
//        }
//        printf("\nmax = %d\nmin = %d\nsum = %d\navg = %.2f\n",number[max],number[min],sum,sum/20.0);

//2.

//        int array[20] = {0};
//        int sum = 0;
//        for (int i = 0; i < 20; i++) {
//            array[i] = arc4random() % (50 - 10 + 1) + 10;
//            sum += array[i];
//        }
//        for (int i = 0; i < 20 - 1; i++) {
//            for (int j = 0; j < 20 - i - 1; j++) {
//                if (array[j] > array[j + 1]) {
//                    int temp = array[j];
//                    array[j] = array[j + 1];
//                    array[j + 1] = temp;
//                }
//            }
//        }
//        for (int i = 0; i < 20; i++) {
//            printf("array[%d] = %d\n",i,array[i]);
//        }
//        printf("最大值%d\n最小值%d\n和%d\n平均值%.2f",array[19],array[0],sum,sum / 20.0);




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

//        char a[100] = "i love iphone";
//        char b[100] = "",c[100] = "";
//        int maxl = 0,l = 0,i = 0,j = 0;
//        long weizhi = 0;
//        for (i = 0; i < 100; i++) {//循环次数是定义的数组a的长度
//            if (a[i] != ' ' && a[i] != '\0') {
//                l++;//单词长度+1
//                b[j] = a[i];
//                j++;
//            }else{
//                j = 0;//数组b的角标清空
//                if (l > maxl) {
//                    maxl = l;
//                    strcpy(c, b);
//                    weizhi = i - strlen(c) + 1;
//                }
//                l = 0;//单词长度清空
//            }
//        }
//        printf("最长单词是%s,单词起始位置%ld\n",c,weizhi);



//        耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。
//        int a[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
//        int number = 13;
//        int count = 0;
//        while (number > 1) {
//            for (int i = 0; i < 13; i++) {
//                if (a[i] != 0) {
//                    count++;
//                }
//                if (count == 3) {
//                    a[i] = 0;
//                    count = 0;
//                    number -= 1;
//                }
//            }
//        }
//        for (int i = 0; i < 13; i++) {
//            if (a[i] != 0) {
//                printf("出卖耶稣的叛徒是%d",a[i]);
//            }
//        }


//        int person[13] = {0};
//        int count = 0, over = 0;
//        for (int i = 0; i < 13; i++) {
//            person[i] = arc4random()%13 + 1;
//            printf("%d ",person[i]);
//        }
//        printf("\n");
//        for (int i = 0; over < 13 - 1; i++) {
//            if (i > 12) {
//                i = 0;
//            }
//            if (person[i] != 0) {
//                count++;
//            }
//            if (count == 3) {
//                count = 0;
//                person[i] = 0;
//                over ++;
//            }
//        }
//        for (int i = 0; i < 13; i++) {
//            if (person[i] != 0) {
//            printf("背叛耶稣的人为%d号,名为:%d",i+1,person[i]);
//            }
//        }



//        有1000000个数,每个数取值范围是 0-999999,找出其中重复的数
//        int a[10] = {0};
//        for (int i = 0; i < 10; i++) {
//            a[i] = arc4random() % 10;
//            printf("%d ",a[i]);
//        }
//        printf("\n");
//        for (int i = 0; i < 10; i++) {
//            int count = 1;
//            for (int j = i + 1; j < 10; j++) {
//                if (a[j] == a[i]) {
//                    count++;
//                }
//            }
//            if (count > 1) {
//                printf("%d重复出现%d次\n",a[i],count);
//            }
//        }


//输入三个单词,查找并输出最长单词

//        char a[3][20] = {0};
//        scanf("%s %s %s",a[0],a[1],a[2]);
//        unsigned long length = 0;
//        int index = 0;
//        for (int i = 0; i < 3; i++) {
//            unsigned long l = strlen(a[i]);
//            if (length < l) {
//                length = l;
//                index = i;
//            }
//        }
//        printf("%s是最长单词,长度是%lu",a[index],length);


//有5个;联系人的通讯录,假设只有 人名  。 , 按人名  从小到大排序,

//        char names[5][20] = {"li","jifhwui","jde","a","dwef"};
//        
//        
//        for (int i = 0; i < 5-1; i++) {
//            for (int j = 0; j < 5-1`-i; j++) {
//                if (strcmp(names[j], names[j+1]) > 0) {
//                    char temp[20] = {0};
//                    strcpy(temp, names[j]);
//                    strcpy(names[j], names[j+1]);
//                    strcpy(names[j+1], temp);
//                }
//            }
//        }
//        for (int i = 0; i < 5; i++) {
//            printf("%s\n",names[i]);
//        } 

    return 0;
}