首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求解一个简单的算法有关问题

2013-12-28 
求解一个简单的算法问题有一个题目,就是判断1000以内,各个位上没有重复的偶数,这个要怎么判断啊,用蛮力法

求解一个简单的算法问题
有一个题目,就是判断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;
}

热点排行