LQ0203 排它平方数枚举+进制

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0203 排它平方数枚举+进制相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2013初赛 C++ A组B题

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

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

原来,203879∗203879=41566646641。

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

具有这样特点的 6 位数还有一个,请你找出它!

再归纳一下筛选要求:

  1. 6 位正整数;
  2. 每个数位上的数字不同;
  3. 其平方数的每个数位不含原数字的任何组成数位

问题分析
枚举6位数,最小的各位数字不同的6位数是123456, 最大的各位数字不同的6位数是987654。
根据进制原理判定6位数是否有重复的数字。
根据进制原理判定平方数的数字是否与6位数的数字重合。

AC的C语言程序如下:

/* LQ0203 排它平方数 */

#include <stdio.h>
#include <string.h>

char cnt[10];

int main()

    for (int i = 123456; i <= 987654; i++) 
        memset(cnt, 0, sizeof cnt);

        int t = i, flag = 0;
        while (t) 
            if (++cnt[t % 10] > 1) 
                flag = 1;
                break;
            
            t /= 10;
        
        if (flag) continue;

        long long p = (long long) i * i;
        while (p) 
            if (cnt[p % 10]) 
                flag = 1;
                break;
            
            p /= 10;
        

        if (flag == 0 && i != 203879)
            printf("%d\\n", i);
    

    return 0;

以上是关于LQ0203 排它平方数枚举+进制的主要内容,如果未能解决你的问题,请参考以下文章

LQ0012 平方和进制

LQ0011 哪天返回进制

LQ0009 平方十位数枚举

LQ0009 平方十位数枚举

LQ0068 X进制减法进制

LQB2013A02排它平方数