LQ0006 奇妙的数字暴力
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0006 奇妙的数字暴力相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2015初赛 C++ A组C题,Java C组A题
题目描述
小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?
输出格式
请输出该数字,不要输出任何多余的内容。
问题分析
先求枚举的范围,数字的平方和立方连起来10位,编写以下C语言离线程序:
/* LQ0006 奇妙的数字 离线程序,用于算值范围 */
#include <stdio.h>
#include <string.h>
char s[16];
int main()
int i = 1, start, end;
for (; ; i++)
sprintf(s, "%d%d", i * i, i * i *i);
if (strlen(s) >= 10)
start = i;
break;
for (i++; ; i++)
sprintf(s, "%d%d", i * i, i * i *i);
if (strlen(s) > 10)
end = i - 1;
break;
printf("%d %d\\n", start, end);
return 0;
运行上述程序,输出“47 99”,所以枚举47-99即可。
编写连线程序,枚举47-99的数字,判定数字的平方和立方连起来是否唯一覆盖0-9的每一个数字。
题记:
程序解题,有时候离线程序是必要的。
AC的C语言程序如下:
/* LQ0006 奇妙的数字 */
#include <stdio.h>
#include <string.h>
char s[10 + 1];
int cnt[10];
int main()
for (int i = 47; i <= 99; i++)
sprintf(s, "%d%d", i * i, i * i * i);
memset(cnt, 0, sizeof cnt);
for (int j = 0; s[j]; j++)
cnt[s[j] - '0']++;
int flag = 1;
for (int i = 0; i < 10; i++)
if (cnt[i] != 1)
flag = 0;
break;
if (flag)
printf("%d\\n", i);
return 0;
上述程序运行结果是输出69。
以上是关于LQ0006 奇妙的数字暴力的主要内容,如果未能解决你的问题,请参考以下文章