1.打印图案
#include <stdio.h> int main() { int n; char ch[] = "abcdefghijklmnopqrstuvwxyz"; char* p = ch; scanf("%d", &n); for (int i = n; i > 0; i--) { for (int j = 0; j < n-i; j++) printf(" "); for (int k = 1; k <= 2 * i - 1; k++) printf("%c", *(p + k - 1)); if(i > 1) printf("\n"); } return 0; }
这里打印图案没什么难度,主要是按顺序依次输出abc...这里我采用了指针,也可以用asc||码值
2.打印乘法表右对齐
#include <stdio.h> int main() { int n; scanf("%d", &n); for (int i = n; i > 0; i--) { for (int j = 0; j < n - i; j++) { printf(" "); } for (int j = i; j > 0; j--) { printf("%d*%d=%2d ", i, j, i * j); } printf("\n"); } return 0; }
3.计算圆周率(蒙特卡罗法)
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main() { double x = 0, y = 0, pi = 0; double n = 1e6, count = 0, a; scanf("%lf", &a); srand(a); for (int i = 0; i < n; i++) { x = (double)rand() / RAND_MAX; y = (double)rand() / RAND_MAX; if (sqrt(x * x + y * y) < 1) count++; } pi = 4.0 * (count / n); printf("%.5lf", pi); return 0; }
解读一下这个代码:首先定义x,y表示坐标,然后设定一个随机数种子srand(a),意思就是如果a等于100,下面rand取随机数时从100开始,在除以RAND_MAX(表示一个很大的随机数,至少也是三十多万),所以(double)rand()/RAND_MAX范围在0-1之间(也可以理解成一个有限的数乘上无穷小量还是一个无穷小量),当然可能由于编译器的差异,不同编译环境下算出的pi值不同。 (因为产生的随机数不一样)
4.哥德巴赫猜想
#include <stdio.h> int main() { int n, k, x; scanf("%d", &n); for (int i = n; i > 2; i--) { for (int j = 2; j <= i; j++) { if (i + j == n) { for (x = 2; x < j; x++) if (j % x == 0) break; for (k = 2; k < i; k++) if (i % k == 0) break; if (k == i && x == j) printf("%d+%d\n", j, i); } } } return 0; }
别先去判断质数,先去判断两数之和,大大节省运行时间