LQ0203 排它平方数枚举+进制
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0203 排它平方数枚举+进制相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2013初赛 C++ A组B题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明正看着 203879 这个数字发呆。
原来,203879∗203879=41566646641。
这有什么神奇呢?仔细观察,203879 是个 6 位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的 6 位数还有一个,请你找出它!
再归纳一下筛选要求:
- 6 位正整数;
- 每个数位上的数字不同;
- 其平方数的每个数位不含原数字的任何组成数位
问题分析
枚举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 排它平方数枚举+进制的主要内容,如果未能解决你的问题,请参考以下文章