//第四届蓝桥杯软件类国赛真题-C-C-1_猜年龄
/*
题目标题: 猜年龄
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。
他曾在1935~1936年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。
于是有人询问他的年龄,他回答说:
“我年龄的立方是个4位数。我年龄的4次方是个6位数。
这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。
通过浏览器,直接提交他那时的年龄数字。
注意:不要提交解答过程,或其它的说明文字。
*/
/*【解题思路】
解法一:暴力枚举
答案:18
*/
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int book[10];//标记0~9这10个数字出现的次数,下标表示0~9这10个数字,值表示出现的次数
/*
* @简介:检测年龄age是否满足题意条件
* @参数:年龄age
* @返回:若满足条件返回true,否则返回false
*/
bool isSolution(int age)
{
int product1 = (int)pow(age,3);
int product2 = (int)pow(age,4);
//检测是否满足 年龄的立方是个4位数、年龄的4次方是个6位数
if(product1/1000 == 0)
return false;
if(product2/10000 == 0)
return false;
do{
book[product1%10]++;
product1 /= 10;
}while(product1);
do{
book[product2%10]++;
product2 /= 10;
}while(product2);
//检测是否满足 这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次
for(int i=0;i<10;i++)
{
if(book[i] != 1 )
return false;
}
return true;
}
int main()
{
for(int i=10;i<100;i++)
{
memset(book,0,sizeof(book));
if(isSolution(i))
cout<<"他那时的年龄数字为:"<<i<<endl;
}
return 0;
}
第四届蓝桥杯软件类国赛真题-C-C-1_猜年龄
最新推荐文章于 2022-06-18 17:05:56 发布