Page 137 3~12,16

#pragma once
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
 
// p137-3=============================================================
// 最大公约数
int maxgy(int a, int b) {
	// 20 % 12 --> 12 % 8 --> 8 % 4 = 0 break
	int t = 0;
	if (a < b) {
		t = a, a = b, b = t;
	} // set max(a,b) is a
	while (b) {
		t = a % b;
		a = b;
		b = t;
	}
	return a;
}
 // 最小公倍数
int mingb(int a, int b) {
	//  20*i % 12 == 0 || 12*j%20 == 0 --> 20*i || 12*j is min gb
	int i = 1;
	while ((a * i) % b) {
		i++;
	}
	return a * i;
}
 
// p137-4=============================================================
 
void countChar() {
	//输人一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。p137-4
	char x;
	int a, b, c, d;
	a = b = c = d = 0;
 
	printf("请输入一行字符: ");
 
	while ((x = getchar()) != '\n') {
		if ((x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z'))  a++;
 
		else if (x == ' ')  b++;
 
		else if (x >= '0' && x <= '9')  c++;
 
		else  d++;
	}
 
	printf("英文字母数量:%d\n空格数量:%d\n数字数量:%d\n其他字符数量:%d\n", a, b, c, d);
}
 
// p137-5=============================================================
void SumNa() {
	printf("其中a是一个数字,n表示a的位数,n由键盘输入。例如:2+22+222+2222+22222 (此时 n=5)P137.5\n");
	int a, n, i = 1, sum = 0, ax = 0;
 
	printf("please input a and n(Separate with spaces)=: ");
	scanf("%d%d", &a,&n);
 
	while (i <= n) {
		ax += a;   //2  22 222
		sum += ax;    //2 24 246
		if (i != n) printf("%d + ", ax);
		else printf("%d = %d", ax, sum);
		ax *= 10;  //20 220
		i++;
	}
}
 
// p137-6=============================================================
// 递归法求阶乘
long long int factorial(int n) {  
	if (n == 0 || n == 1) return 1;
	else return n * factorial(n - 1);
}
void sumFactorial() {
	int i;
	double sum = 0;
	for (i = 1; i <= 20; i++) {
		sum += factorial(i);
	}
 
	printf("1~20每个数字阶乘总和为: %f\n", sum);
}
 
 
// p137-7=============================================================
void SumP137_6() {
	int nl = 100, n2 = 50, n3 = 10;
	double k, s1 = 0, s2 = 0, s3 = 0;
 
	for (k = 1; k <= nl; k++)
		s1 = s1 + k;
 
	for (k = 1; k <= n2; k++)
		s2 = s2 + k * k;
 
	for (k = 1; k <= n3; k++)
		s3 = s3 + 1 / k;
 
	printf("sum=%lf\n", s1 + s2 + s3);
}
 
// p137-8=============================================================
// 求水仙花数
int isSXH(int n) {
	int i, j, k;
	i = n / 100;
	j = n / 10 - i * 10;
	k = n % 10;
	if (n == i * i * i + j * j * j + k * k * k) return 1;
	else return 0;
}
void searchSXH() {
	int i;
	printf("SXH numbers are: ");
	for (i = 100; i < 1000; i++) {
		if (isSXH(i)) printf("%-4d", i);
	}
	printf("\n");
}
 
// p137-9=============================================================
// 完数
void WanShu(int a) {
	int i, j = 0, sum = 0;
	for (i = 1; i < a; i++) {
		if (a % i == 0) {
			sum += i;
			j++;
		}
	}
	if (sum == a) {
		printf("%d its factors are ", a);
		int n = 0;
		for (i = 1; i < a; i++) {
			if (a % i == 0) {
				n++;
				if (n != j) {
					printf("%d, ", i);
				}
				else
				{
					printf("%d\n", i);
				}
			}
		}
	}
 
}
 
// p137-10=============================================================
void SumP137_10(int m=10) {
	int i;
	float a = 1.0, b = 2.0, sum = 0.0, t;
	for (i = 1; i <= m; i++) {
		sum = sum + b / a;
		t = a;
		a = b;
		b = b + t;
	}
	printf("%f,%f", sum, 31.0 / 6);
}
 
// p138-11=============================================================
// 小球落地
void FallBall(int n = 3) {
	float sn = 100, hn = sn / 2;
	int i;
	for (i = 2; i <= n; i++) {
		sn += 2 * hn;
		hn /= 2;
	}
	printf("第%d次落地共经历%f米\n", n, sn);
	printf("第%d次落地反弹的高度是%f米\n", n, hn);
}
 
// p138-12=============================================================
// 猴子摘桃
void SumP138_12() {
	int i, sum = 1;
	for (i = 1; i <= 9; i++) {
		sum = (sum + 1) * 2;
	}
	printf("第一天共摘了%d个桃子\n", sum);
}
 
// p138-16=============================================================
// 第五章符号打印
 
void myprint(int n=7) {
	int m = (n + 1) / 2;
	int i, j;
	for (i = 1; i <= m; i++) {
		for (j = 1; j <= m - i; j++) {
			printf(" ");
		}
		for (j = 1; j <= 2 * i - 1; j++) {
			printf("*");
		}
		printf("\n");
	}
	for (i = 1; i <= n / 2; i++) {
		for (j = 1; j <= i; j++) {
			printf(" ");
		}
		for (j = 1; j <= n - 2 * i; j++) {
			printf("*");
		}
		printf("\n");
	}
}
 
 
// p136=============================================================
// 第五章字符加密
void encrypt() {
	char c;
	printf("please input a char: ");
	while ((c = getchar()) != '\n') {
		if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') {
			c += 4;
			if (c > 'Z' && c <= 'Z' + 4 || c >'z') {
				c -= 26;
			}
			printf("%c", c);
		}
	}
}
 
 
 // 寻找完数
void searchWanShu() {
	int i;
	for (i = 3; i <= 1000; i++) {
		WanShu(i);
	}
}