求解一个简单的算法问题
有一个题目,就是判断1000以内,各个位上没有重复的偶数,这个要怎么判断啊,用蛮力法一个个试过来?
然后每一次循环都用三个整型变量a,b,c,分别储存偶数的个位、十位、百位,然后判断是否出现重复?
觉得这样的算法很麻烦,有没有更好的想法,最好能附上代码~谢谢啦
[解决办法]
其实1000以内这样的数据规模,一个一个数分解成个位十位百位再判断速度上一点也不慢。如果真不想这么做的话,可以尝试构造法:
因为偶数都是个位以0、2、4、6、8为结尾的,且1000以内的偶数最多只有3位(1000明显不满足各位不重复的条件),则可以:
(1)打印符合条件的1位数,即0,2,4,6,8
(2)打印符合条件的2位数,即十位为1~9,个位是0,2,4,6,8且个位与十位不相等
(3)打印符合条件的3位数,即百位为1~9,十位为0~9且与百位不相等,个位是0,2,4,6,8且个位与十位、百位不相等
#include <stdio.h>
int main()
{
char a, b, c;
for(c = '0'; c <= '8'; c += 2){
putchar(c);
putchar('\n');
}
for(b = '1'; b <= '9'; ++b){
for(c = '0'; c <= '8'; c += 2){
if(c == b) continue;
putchar(b);
putchar(c);
putchar('\n');
}
}
for(a = '1'; a <= '9'; ++a){
for(b = '0'; b <= '9'; ++b){
if(b == a) continue;
for(c = '0'; c <= '8'; c += 2){
if(c == b
[解决办法]
c == a) continue;
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
}
}
}
return 0;
}