#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
int main()
{
//第三题
//做这个题首先要会最大公约数和最小公倍数的求法,在百度上搜的求法。
//int m, n, q, r, t;
//printf("请输入两个正整数:");
//scanf("%d,%d", &m, &n);
//q = m*n;
//if (n < m)//保证n>m
//{
// t = n;
// n = m;
// m = t;
//}
//while (m != 0)//辗转相乘法
//{
// r = n%m;
// n = m;
// m = r;
//}
//printf("最大公约数是:%d\n", n);
//printf("最小公倍数是:%d\n", q/n);//两个数的乘积等于这两个数的最大公约数与最小公倍数的积
//第四题
//char c;
//int a=0, b=0, x=0, y=0;
//printf("请输入一串字符,按回车键截止:");
//while ((c = getchar()) != '\n')
//{
// if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z')
// a++;
// else if (c == ' ')
// b++;
// else if (c >= '0'&&c <= '9')
// x++;
// else
// y++;
//}
//printf("字母有%d个\n空格有%d个\n数字有%d个\n其他字符有%d个\n", a, b, x, y);
//第五题
//int a, n, s=0,t=0,q=1;
//printf("a=");
//scanf("%d", &a);
//printf("n=");
//scanf("%d", &n);
//while (q <= n)
//{
// t = t + a*pow(10,q-1);
// s = s + t;
// q++;
//}
//printf("S=a+aa+aaa+...=%d\n", s);
//第六题
//int n, q = 1;
//double s = 0, t = 1;//s和t不能用int型或long型,int型和long型的整数范围无法容纳求得的结果,使用double型精度更高。
//printf("n=");
//scanf("%d", &n);
//while (q <= n)//我是用while循环做的,答案用的for循环,再用for循环做一遍。
//{
// t = t*q;//阶乘
// s = s + t;
// q++;
//}
//printf("s=1!+2!+....+n!=%.15e\n", s);
//for (q = 1; q <= n; q++)//for循环做法
//{
// t = t*q;
// s = s + t;
//}
//printf("s=1!+2!+....+n!=%.15e\n", s);
//第七题
//double k,s1 = 0, s2 = 0, s3 = 0;
//for (k = 1; k <= 100; k++)
//{
// s1 = s1 + k;
//}
//for (k = 1; k <= 50; k++)
//{
// s2 = s2 + k*k;
//}
//for (k = 1; k <= 10; k++)
//{
// s3 = s3 + 1.0 / k;
//}
//printf("s=%.6f\n", s1 + s2 + s3);
//第八题
//int n, x, y, z;
//printf("所有的水仙花数有:");
//for (n = 100; n < 1000; n++)
//{
// x = n / 100;
// y = (n - x * 100) / 10;//y=n/10-x*10
// z = n - x * 100 - y * 10;//z=n%10
// if (n == pow(x, 3) + pow(y, 3) + pow(z, 3))
// printf("%d ", n);
//}
//printf("\n");
//第九题
//int n, q ,s;
//for (n = 1; n < 1000; n++)//这里答案中定义的n=2,其实1和2都可以,下面的q是小于n的,所以1不会计算在内,但多了一次循环。
//{
// s = 0;
// for (q = 1; q < n; q++)
//
// if ((n%q) == 0) //我的思路跟答案上第二种方法一致,但我一开始把s=0直接在循环外就定义了,结果就出不来。
// s = s + q; //看了答案中的方法一,一个一个的把因子给赋值再判断因子的个数输出太麻烦了,如果数字更大的话,因子也会更多。
// if (s == n)
// {
// printf("%d it factors are ", s);
// for (q = 1; q < n; q++)
// if ((n%q) == 0)
// printf("%d,",q);
// printf("\n");
// }
//
//}
//第十题
//double x=2, y=1, s=0,t,n;
//for (n = 1; n <= 20; n++)
//{
// s = s + x / y; //这个题重在找出分子分母规律。
// t = x;
// x = x + y;
// y = t;
//}
//printf("s=%.10f\n", s);
//第十一题
//double h = 50, n,s=100;
//for (n = 2; n <= 10; n++)
//{
// s = s + 2 * h; //第一次只有落下的距离没有弹起的距离,所以循环应该从第二次开始算,并把h的初始值定义为第二次的高度
// h = h / 2;
//
//
//}
//printf("第十次反弹%f米\n", h);
//printf("一共经过%f米\n", s);
//第十二题
//int x=1, n = 9;
//while (n > 0)
//{
// x = (x + 1) * 2;
// n--;
//}
//printf("一共%d个桃子\n", x);
//第十三题
//float x1, x2, a;
//printf("请输入要求的平方根a=");
//scanf("%f", &a);
//x1 = a / 2;
//x2 = (x1 + a / x1) / 2;
//while (fabs(x1 - x2) >= 1e-5)//答案中用的do-while语句。do-while语句的特点:先无条件的执行循环,再判断条件是否成立。
//当while后面的表达式第一次值为真时,两种循环得到的结果相同,否则两者结果不同。因为当while后面表达式为假时,一次循环也不执行,而do-while语句至少执行一次循环。
//{
// x1 = x2;
// x2 = (x1 + a / x1) / 2;
//}
//printf("%f的平方根是%f", a,x2);
//第十六题
//分析图形特点,将图形分为上半部分和下半部分。上半部分分为四行,下半部分分为三行,将每一行拆分成空格部分和*部分观察。
//上半部分:第一行,前面空格数为3,*为1。
//第二行:空格数2,*为3
//第三行:空格数1,*为5
//第四行:空格数0,*为7 观察发现,上半部分空格数=4-行数,*数=2*行数-1
//下半部分:第一行,前面空格数为1,*为5。
//第二行:空格数2,*为3
//第二行:空格数3,*为1 下半部分空格数=行数,*数=7-2*行数
//int i,j,k;
//for (i = 1; i <= 4; i++)//上半部分
//{
// for (j = 0; j <= 4 - i; j++)//空格部分
// printf(" ");
// for (k = 0; k < 2 * i - 1; k++)//*部分
// printf("*");
// printf("\n");
//}
//for (i = 1; i <= 3; i++)//下半部分
//{
// for (j = 0; j <= i; j++)//空格部分
// printf(" ");
// for (k = 0; k <7-2 *i ; k++)//*部分
// printf("*");
// printf("\n");
//}
//第十七题
//char A, B, C;
//for (A = 'X'; A <= 'Z'; A++)//列出A所有可能的对战对象
//{
// for (B = 'X'; B <= 'Z'; B++)//列出B所有可能的对战对象
// {
// for (C = 'X'; C <= 'Z'; C++)//列出C所有可能的对战对象
// {
// if (A != 'X'&&C != 'X'&&C != 'Z'&&A != B&&A != C&&B != C)//把所有条件加上
// printf("A和%c比,B和%c比,C和%c比\n", A, B, C);
// }
// }
//}
return 0;
}