/*计算i的阶乘*/
//#include<stdio.h>
//int main()
//{
// int n = 0;
// int i = 0;
// static int ret = 1; //最初值不能给0,要么乘以任何数都为零
// scanf("%d", &i);
// for(n = 1; n <= i; n++)
// {
// ret = ret * n;
// }
// printf("ret = %d\n", ret);
// return 0;
//}
/*计算1! + 2! + 3!*/
//#include<stdio.h>
//int main()
//{
// int i = 0;
// int n = 0;
// int ret;
// static int sum = 0;
// for(n = 1; n<=3; n++)
// {
// ret = 1; //将ret每次的初初始值设为1,防止ret进行累积计算
// for(i = 1; i<= n; i++)
// {
// ret = ret * i;
// } //算出n的阶乘
// sum = sum + ret; //将n的阶乘累积加在一起
// }
// //ret = 1*1 = 1
// //ret = 1*1*2 = 2
// //ret = 1*1*2*3 = 6
// printf("sum = %d\n", sum);
// return 0;
//}
/*计算1! + 2! + 3!*/
//#include<stdio.h>
//int main()
//{
// int n = 0;
// int ret = 1;
// int sum = 0;
// for(n = 1; n<=3; n++)
// {
// ret = ret * n;
// sum = sum + ret;
// }
// printf("sum = %d\n", sum);
// return 0;
//}
/*写一个代码,在arr(无序的)数组中找到其中一个数字*/
//#include<stdio.h>
//int main()
//{
// int arr[] = {0,20,2,13,4,5,18,7,8,9,10};
// int k = 8;
// int i = 0;
// int sz = sizeof(arr)/sizeof(arr[0]);
// for(i = 0; i<=sz; i++)
// {
// if(k == arr[i])
// {
// printf("找到了,下表是:%d\n", i);
// break;
// }
// else if(i == sz)
// printf("找不到\n");
// }
// return 0;
//}
/*写一个代码,在arr(有序的)数组中找到其中一个数字*/
/*折半查找算法(其效率是挨个查找算法的log2N)*/
//#include<stdio.h>
//int main()
//{
// int arr[] = {1,2,3,4,5,6,7,8,9,10};
// int sz = sizeof(arr)/sizeof(arr[0]); //计算元素个数
// int left = 0; //左下标
// int right = sz - 1; //元素个数减一就是右下标
// int k = 17; //查找7
// while(left<=right)
// {
// int mid = (left + right)/2; //计算中间元素的下标(一定要定义在while循环里面,因为每次查找的时侯都要再计算一次中间元素的下标)
// if(arr[mid] > k) //arr[mid]为整个数组中的中间值
// {
// right = mid - 1;
// }
// else if(arr[mid] < k)
// {
// left = mid + 1;
// }
// else
// {
// printf("找到了,下标是:%d\n", mid);
// break;
// }
// }
// if(left>right)
// {
// printf("找不到了\n");
// }
// return 0;
//}
/*演示多个字符从两端移动,向中间汇聚*/
//#include<stdio.h>
//#include<string.h>
//#include<windows.h>
//int main()
//{
// char arr1[] = "Welcome to Zhejianggongshang University!";
// char arr2[] = " ";
// int left = 0;
// int right = strlen(arr1) - 1; //计算右下标的位置
// while(left <= right)
// {
// arr2[left] = arr1[left];
// arr2[right] = arr1[right];
// printf("%s\n", arr2);
// //每打印一次休息一秒
// Sleep(1000); //单位是毫秒
// system("cls"); //执行系统命令的一个函数 - cls - 清空屏幕
// left++;
// right--;
// }
// printf("%s\n", arr2);
// return 0;
//}
/*模拟用户登录情景,并且只能登录3次。(只允许输入三次密码,如果密码正确提示登陆成功,如果三次输入均错误,则退出程序)*/
//#include<stdio.h>
//#include<string.h>
//int main()
//{
// int i = 0;
// char password[20] = {0};
// for(i = 0; i<3; i++)
// {
// printf("请输入密码:");
// scanf("%s", password);
// if(strcmp(password, "123456") == 0) //等号不能用来比较两个字符串相等,应该使用一个库函数strcmp
// //如果第一个字符串大于第二个字符串会返回一个大于零的值。如果第一个字符串小于第二个字符串会返回小于零的值
// {
// printf("登陆成功\n");
// break;
// }
// else
// {
// printf("密码错误\n");
// }
// }
// if(i == 3)
// {
// printf("三次密码均错误,请退出\n");
// }
// return 0;
//
//}
/*将字符串1中有字符串2中重复的值不输出*/
//#include<stdio.h>
//int instead(char s1[], char s2[])
//{
// int i, j, k;
// for(k = 0; s2[k] != '\0'; k++)
// {
// for(j = i = 0; s1[i] != '\0'; i++)
// if(s1[i] != s2[k])
// {
// s1[j++] = s1[i];
// }
//
// s1[j] = '\0';
// }
//}
//int main()
//{
// char str1[] = "Good morning!";
// char str2[] = "o";
// printf("%s\n", str1);
// instead(str1, str2);
// printf("%s\n", str1);
// return 0;
//}
/*输入3个数,从大到小输出*/
//#include<stdio.h>
//int main()
//{
// int a = 0;
// int b = 0;
// int c = 0;
// scanf("%d%d%d", &a, &b, &c);
// if(a<b)
// {
// int tmp = a;
// a = b;
// b = tmp;
// }
// if(a<c) //a,b,c的判断顺序一定不能变
// {
// int tmp = a;
// a = c;
// c = tmp;
// }
// if(b<c)
// {
// int tmp = b;
// b = c;
// c = tmp;
// }
// printf("%d %d %d", a, b, c);
// return 0;
//}
/*打印1-100之间3的倍数的数字*/
//#include<stdio.h>
//int main()
//{
// int i = 1;
// for(i = 1; i<100; i++)
// {
// if(i%3 == 0) //i%3,一个数除以3的余数
// {
// printf("%d ", i);
// }
// else
// {
// continue;
// }
// }
// return 0;
//}
/*给定两个数求最大公约数(辗转相除法)*/
//#include<stdio.h>
//int main()
//{
// int m = 0;
// int n = 0;
// int r = 0;
// scanf("%d%d", &m, &n);
// while(m%n)
// {
// r = m%n;
// m = n;
// n = r;
// }
// printf("%d\n", n);
// return 0;
//}
/*打印1000年到2000年之间的闰年*/
//#include<stdio.h>
//int main()
//{
// int year = 1000;
// int count = 0;
// for(year = 1000; year <= 2000; year++)
// {
// //判断year是否为闰年
// //1.能被4整除,且不能被100整除 2.能被400整除
// if(year%4 == 0 && year%100 != 0)
// {
// printf("%d是闰年\n", year);
// count++;
// }
// else if(year%400 == 0)
// {
// printf("%d是闰年\n", year);
// count++;
// }
// else
// continue;
// }
// printf("\n%d\n", count);
// return 0;
//}
/*方法2*/
//#include<stdio.h>
//int main()
//{
// int year = 0;
// int count = 0;
// for(year = 1000; year <= 2000; year++)
// {
// if(((year%4 == 0) && (year%100 != 0)) || (year%400 == 0))
// {
// printf("%d是闰年\n", year);
// count++;
// }
// else
// continue;
// }
// printf("\n%d\n", count);
// return 0;
//}
/*打印100到200之间的素数*/
//#include<stdio.h>
//int main()
//{
// int i = 0;
// int count = 0;
// int j = 0;
// for(i = 100; i<=200; i++)
// {
// //判断i是否为素数
// //1.试除法 首先产生2到i-1之间的数字
// for(j = 2; j <= i-1; j++)
// {
// if(i%j == 0)
// {
// break; //跳出内层for循环
// }
// }
// if(j == i)
// {
// count++;
// printf("%d\n", i);
// }
// }
// printf("100-200之间的素数总数为;%d\n", count);
// return 0;
//}
/*方法二*/
//#include<stdio.h>
//#include<math.h> //数学库函数
//int main()
//{
// //如果i不是素数,那么必然有i = a*b
// //并且a和b中至少有一个 <= 开平方i
// int i = 0;
// int j = 0;
// int count = 0;
// for(i = 101; i<=200; i+=2) //因为偶数不可能为素数,所以直接从101开始,每次给i+2
// {
// for(j = 2; j <= sqrt(i); j++) //sqrt()是数学库函数,意思为开平方
// {
// if(i%j == 0)
// {
// break;
// }
// }
// if(j>sqrt(i))
// {
// count++;
// printf("%d ", i);
// }
// }
// printf("\n100-200之间的素数总数为:%d\n", count);
// return 0;
//}
/*编写程序写一下1到100的所有整数中出现多少个数字9*/
//#include<stdio.h>
//int main()
//{
// int i = 0;
// int count = 0;
// for(i = 1; i<=100; i++)
// {
// if(i%10 == 9)
// {
// count++;
// }
// if(i/10 == 9)
// {
// count++;
// }
// }
// printf("总数为:%d\n", count); //99个位有一个9,十位有一个9,算作两个
// return 0;
//}
/*计算1/1-1/2+1/3-1/4+1/5…+1/99-1/100的值*/
//#include<stdio.h>
//int main()
//{
// int i = 0;
// double sum = 0.0;
// int flag = 1;
// for(i = 1; i<=100; i++)
// {
// sum += flag*(1.0/i); //将1改为1.0则可以除出来小数,否则只能除出来整数
// flag = -flag; //实现加一个数,减一个数
// }
// printf("%lf\n", sum);
// return 0;
//}
/*求10个整数的最大值*/
//#include<stdio.h>
//int main()
//{
// int arr[] = {-1,-2,-3,-4,-13,-6,-7,-8,-9,-10};
// int max = arr[0]; //假设这个数组中第一个数(第一个数的下标为0)为最大值
// int i = 0;
// int sz = sizeof(arr)/sizeof(arr[0]);
// for(i = 0; i<sz; i++) //i就是我们这个数组中每个元素的下标
// {
// if(arr[i]>max)
// {
// max = arr[i];
// }
// }
// printf("max = %d\n", max);
// return 0;
//}
/*乘法口诀标的打印*/
//#include<stdio.h>
//int main()
//{
// int i = 0;
// int j = 1;
// for(i = 1; i <= 9; i++) //确定打印9行
// {
// for(j = 1; j <= i; j++)
// {
// printf("%d*%d=%-2d ", i, j, i*j); //%2d的意思是打印时直接打印2位,如果不足两位,用空格补齐,"-2"表示左对齐,没有"-"表示右对齐
// }
// printf("\n");
// }
// return 0;
//}
/*关机程序*/
//#include<stdio.h>
//#include<string.h>
//int main()
//{
// char input[20] = {0};
// //shutdown -s -t 60 电脑在60秒内关机
// //shutdown -a
// system("shutdown -s -t 60");
//again:
// printf("请注意,您的电脑在1分钟之内关机,如果输入:我是猪,就取消关机\n请输入>:");
// scanf("%s", input);
// if(strcmp(input, "我是猪") == 0) //比较两个字符串--strcmp()
// {
// system("shutdown -a");
// }
// else
// {
// goto again;
// }
// return 0;
//}