猜年龄
美国数学家维纳(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; }