猜年龄

美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。

    一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:

    “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”

    请你推算一下,他当时到底有多年轻。

答案写在这。

 

解题思路: 将三次方, 四次方转换为字符串形式, 用sprintf()函数将这两个整数拼接成字符串, 检查字符串的长度是否为10, 并且检查字符串中有无重复字符, 若长度为10且无重复字符, 则符合要求, 输出结果

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
bool isUnique(char s[])
{
	bool a[256];
	memset(a, 0, sizeof(a));
	int len = strlen(s);
	for(int i = 0; i < len; ++i)
	{
		int v = (int)s[i];
		if(a[v]) return false;
		a[v] = true;
	}
	return true;
}
int main()
{
	int a, b;
	char str[10];
	for(int i = 11; i <= 50; ++i)
	{
		a = i*i*i;
		b = a * i;
		sprintf(str, "%d%d", a, b);
		if(strlen(str) == 10 && isUnique(str))
			cout << i;
	}
	return 0;
}

  

posted @ 2019-01-13 22:05  青衫客36  阅读(245)  评论(0编辑  收藏  举报