//题目13:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 //本身。例如:153是一个“水仙花数”,因为153 = 1的三次方+5的三次方+3的三次方。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:先准备一个动态内存数组,用来存储所有的三位数,这个三位数百位不可以是0 //为了便于分解,先定义结构体 //然后获取百位,num/100,获取十位,(num-百位*100)/10,个位是(num-百位*100-十位*10) //分解出个位,十位,百位,看是否满足水仙花数 //pow()函数的使用 struct NarcissuNum{ int Hundred; int Ten; int Indiv; }; void main(){ //定义动态数组 struct NarcissuNum *p = malloc(sizeof(struct NarcissuNum) * 2000); struct NarcissuNum num,*pn; pn = # //3重循环构建所有三位数 int m = 0; for (int i = 1; i < 10; i++) { for (int j = 0; j < 10; j++) { for (int k = 0; k < 10; k++) { if ((int)(pow(i, 3.0) + (int)pow(j, 3.0) + (int)pow(k, 3.0)) == (i * 100 + j * 10 + k)) { pn->Hundred = i; pn->Ten = j; pn->Indiv = k; *(p + m) = *pn; m++; } } } } for (int i = 0; i < m; i++) { printf("\n%d%d%d", (p + i)->Hundred, (p + i)->Ten, (p + i)->Indiv); } system("pause"); }
//题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:首先求出这个整数的因数,再对因数求因数,直到无法求值为止,递归调用----这个思路错误 //正整数分解质因数,如果从小到大去分解,就不会存在(能再被分解的因数) void main(){ int num = 0; int index = 0; scanf("%d", &num); printf("\n"); //index = (int)sqrt((double)(num+1)); for (int i = 2; i <= num; i++) { while (1){ if (num%i == 0) { if (num/i==1) { printf("%d", i); } else{ printf("%d*", i); } num = num / i; } else{ break; } } } system("pause"); }
//题目15:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, //60分以下的用C表示。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析;可以使用if嵌套或者switch语句来完成 void protect1(int num){ if (num >= 90) { printf("A"); } else if (num >= 60){ printf("B"); } else{ printf("C"); } } void protect2(int num){ int temp = num /10; switch (temp) { case 9: printf("A"); break; case 8: case 7: case 6: printf("B"); break; default: printf("C"); break; } } void main(){ int num = 0; scanf("%d",&num); printf("\n"); protect2(num); system("pause"); }