使用循环结构求:
水仙花数(它的各位数字的立方和等于它自己的3位数)
小于1000的所有的同构数(平方后低位的数恰好等于该数的数是同构数)
计算组合数
求水仙花数:
隐含条件是三位数
使用for循环:
for(i=101;i<1000;i++)
循环体中·分别表示三个数
a=i%10
b=i/10%10
c=i/100
在循环体中使用if语句判断是否符合条件,符合则输出。
#include <stdio.h> int main (void) { int i,a,b,c; for (i=101;i<1000;i++) { a=i%10; b=i/10%10; // * / % 三种运算符优先级相同,此处从左往右进行运算 c=i/100; if (i==a*a*a+b*b*b+c*c*c) { printf("%d\n",i); } } return 0; }
求小于1000的所有同构数:
对于一位数:“低位的数"恰好就是平方后的个位数
对于两位数:“低位的数"是平方后的数的十位和个位对于三位数:"低位的数"是平方后的数的百位、十位和个位
所以可以分开讨论
分别三次使用for循环
``
#include <stdio.h> int main (void) { int i,a,b,c; //int是有符号型整数,所能存储的最大整数为2^31-1) long int s; //即int型所能存储的最大整数为2147483648(21亿多) //所以s可以定义为int for (i=1;i<10;i++) { s=i*i; a=s%10; //由于由取余运算,所以s不能是浮点型!! if (a==i) printf("%d\n",i); } for (i=10;i<100;i++) { s=i*i; a=s%10; b=s/10%10; if (i==a+b*10) printf("%d\n",i); } for (i=101;i<1000;i++) { s=i*i; a=s%10; b=s/10%10; c=s/100%10; if (i==a+b*10+c*100) printf("%d\n",i); } return 0; }
求组合数
即两次阶乘
#include <stdio.h> int main (void) { double m,n,a,b; int i,k; printf("请输入m、n(m<n):\n"); scanf("%lf%lf",&m,&n); a=1; b=1; for (i=1;i<=n;i++) { a*=i; } for (k=1;k<=m;k++) { b*=k; } printf("%lf",b/a); return 0; }