一、求复合特定条件的整数集
Task1:
给定不超过6的正整数A,考虑从A开始的连续4个数字,请输出所有由它们组成的无重复的3位数。
输入格式: 在输入的一行中给出A
输出格式:输出满足条件的3位数,要求从小到大,每行6个整数,整数间以空格分隔,但行末不能有多余的空格。
int a,i,j,k,cnt;
scanf("%d",&a);
cnt=0; //用cnt来判断是否换行
for(i=a;i<=a+3;i++){
for(j=a;j<=a+3;j++){
for(k=a;k<=a+3;k++){
if(i!=j&&i!=k&&j!=k) {
printf("%d%d%d",i,j,k);
cnt++;
if(m%6) printf(" ");
else printf("\n");
}
}
}
}
输出结果实例:
二、求水仙花数(难点)
Task2:
水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例如:153 = 13 + 53 + 33。要求编写程序计算所有的N位水仙花数。(位数=幂次数=N)
输入格式:输入一个正整数(3<=N<=7)。
输出格式:按递增顺序输出所有的N位水仙花数,每个数字占一行。
int n,i,first;
scanf("%d",&n);
//找到n位数的遍历起始值first,例如3位数遍历100~999,100为起始值
first = 1;
for(i=1;i<n;i++){
first *= 10;
}
//遍历
for(i=first;i<10*first;i++){
int t = i; //a单独保存
int sum = 0; //每遍历一轮,sum清零
//拆分数字,得到幂次和
do{
int d = t%10; //得到末位数字d
t /= 10; //原数字消除末位
//求各个末位数字的n次幂
int j,p=1;
for(j=0;j<n;j++){
p *= d;
}
sum += p;
}while