//题目10:打印楼梯,同时在楼梯上方打印两个笑脸。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:楼梯,打印阶梯形状,涉及到行列,for循环 void main6(){ //假设个台阶,每个台阶宽3个单位,高3个单位 //笑脸的字符是'1' //5个台阶,总高度就是5*3=15,同理宽度也是15 //第一行,宽度是4*3=12,从12开始打印*号 //行(y轴) int temp = 0; int temp2 = 0; char ch = '1'; for (int i = 0; i < 11; i++) { temp = 8 - i / 2 * 2; if (temp + 4>11) { temp2 = 11; } else { temp2 = temp + 4; } //x轴 for (int j = 0; j < 11; j++) { if (j>(temp-1)&&j<(temp+3)) { //开始打印*号 if (!(i % 2)) { //打印3个*号 printf("*"); } else{ //打印1个*号 if (j == temp) { printf("*"); } else{ printf(" "); } } } else{ if (j == (temp -1)) { if ((i % 2)) { printf("%c", ch); //printf("#"); } else{ printf(" "); } } else{ printf(" "); } } } printf(" "); } system("pause"); }
//题目11:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 //后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //分析:通过观察发现,1、1、2、3、5、8、13、21,n个月兔子的对数==(n-1)个月兔子的对数+(n-2)个月兔子的对数 //这就是斐波那契数列,抽象为f(n)=f(n-1)+f(n-2) //可以使用递归,也可以使用数组 //方法1 int getnum(int n){ if (n==2) { return 1; } if (n==1) { return 1; } return getnum(n - 1) + getnum(n - 2); } void main(){ //方法1 //printf("%d", getnum(8)*2); //方法2,使用数组,动态分配内存 int num = 0; scanf("%d",&num); int *p = malloc(num * sizeof(int)); //循环给数组赋值 for (int i = 0; i < num; i++) { if (i==0) { *(p + i) = 1; } else{ if (i==1) { *(p + i) = 1; } else{ *(p + i) = *(p + i - 1) + *(p + i - 2); } } printf("%d ", *(p + i)); } system("pause"); }
//题目12:判断101-200之间有多少个素数,并输出所有素数。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:素数:质数(prime number)又称素数,有无限个。除了1和它本身以外不再有其他的因数;否则称为合数。 //想法做2个循环,一个循环101--200;第二个循环从1到某个数 void main(){ int index = 0; int k = 0; for (int i = 101; i < 201; i++) { //使得每次循环的量减少一半 k =(int) sqrt(i + 1); int tenp = 1; for (int j = 2; j <= k; j++) { if (i%j==0) { tenp = 0; //说明可以整除,说明是合数,不是质数 break; } } if (tenp) { index++; printf(" %d",i); } } printf(" 质数的总个数是%d",index); system("pause"); }