设为首页 加入收藏

TOP

穷举(二):直接确定区间穷举(六)
2019-06-13 12:08:05 】 浏览:350
Tags:穷举 直接 确定 区间
bsp;        return 0;

    return 1;

}

int check4(int x,int used[10])

{

    do {

        if(used[x % 10] != 0)

            return 0;

        used[x%10]++;

    } while(x /= 10);

    return 1;

}

int main()

{

    int a,b,c,i,cnt=0,used[10];

    for(c=1023; c <=9876; c++)

       {

        for (i=0;i<10;i++)

                     used[i]=0;

        if(!check4(c,used))

            continue;

        for(a=2; a <= 98; a++)

              {

            if(c % a != 0)

                continue;

            b = c / a;

            if(a > b)

               continue;

            if(!check(a, b,used))

                continue;

            cout << a << " * " << b << " = " << c << endl;

            cnt++;

        }

    }

    cout << "Count="<<cnt<<endl;

       return 0;

}

【例6】排它平方数

      小明正看着 203879 这个数字发呆。

      原来,203879 * 203879 = 41566646641

      这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。

      请找出具有这样特点的所有6位数。

      (1)编程思路。

      对6位数进行穷举,区间下限为123456,上限为987654。

      定义数组used[10]记录数字0~9的使用情况,分离出穷举的6位数的各位x,且置used[x]++,若每个used[x]大于2,则数字x重复出现,不合要求,进行下次穷举。

      另外,由于两个6位数相乘结果超出了整型数的表示范围,采用两个数组元素来保存积。计算6位数i的平方时,将i表示为a*10000+b,这样i的平方等于a*a*100000000+2*a*b*10000+b*b,用数组元素x[1]保存低8位,用x[0]保存高8位,具体方法为:

              x[1]=x[1]+c%10000*10000;

              x[0]=x[0]+c/10000;

              x[0]=x[0]+x[1]/100000000;

              x[1]=x[1]%100000000;

      然后再检

首页 上一页 3 4 5 6 7 下一页 尾页 6/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇个人学习笔记:C语言程序结构 下一篇有些CCS工程中为什么会有两个CMD..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目