c语言编程题 题目标题: 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就

c语言编程题题目标题:猜年龄美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻... c语言编程题
题目标题: 猜年龄

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

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

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

请你推算一下,他当时到底有多年轻。
展开
 我来答
好名字都被取了
2019-09-24 · TA获得超过423个赞
知道答主
回答量:101
采纳率:90%
帮助的人:5.8万
展开全部

c语言追求的是程序执行时间效率,题目给出立方之后是四位数,可以人为确定年龄范围在10-21岁,至于为什么不确定六位数再精确一点,个人觉得没什么必要。这个编程的核心在于如何分辨这10个数字不同,我定义了一个函数,用数组加循环判断。以下是具体代码。

#include <stdio.h>
#include<stdlib.h>
#include<math.h>

int same(int a[10]);//判断10个数是否相等,相互不相等返回1
int many(int a);//判断一个整型数是几位数

main()
{   
int a[10] ,i ,j ,s ,l;  //a储存10个数字的数组,i年龄循环变量,j将数字存入数组,s储存四位数,l储存六位数
for(i=10;i<22;i++){
s=pow((double)i,3);
l=pow((double)i,4);
if(many(l)!=6)
continue;//如果不是六位数则退出当次循环
for(j=0;j<4;j++){
a[j]=s%10;
s=s/10;
}//存入四位数
for(j=4;j<10;j++){
a[j]=l%10;
l=l/10;
}//存入六位数
if(same(a))
printf("age=%d\n",i);//输出
}
system("pause");
}

int many(int a){
int i=0;
while(a>0){
a=a/10;
i++;
}
return i;
}

int same(int a[10]){
int i,j,flag=1;
for(i=0;i<10;i++){
for(j=i+1;j<10;j++){
if(a[i]==a[j])
flag=0;
}
}
return flag;
}
老冯文库
推荐于2017-11-24 · 知道合伙人软件行家
老冯文库
知道合伙人软件行家
采纳数:1139 获赞数:8733

向TA提问 私信TA
展开全部

Java程序:

public class Test {
public static void main(String[] args) {
int age;
int num1, num2;
int[] arr = new int[10];
int start = (int) Math.pow(10, 5.0/4);
int max = (int) Math.pow(10, 4.0/3);
int i;

for(age=start; age<max; age++) {
num1 = age * age * age;
num2 = age * age * age * age;
if(! (num1>=1000 && num1<10000) && !(num2>=10000 && num2<100000)) {
continue;
}
i = 0;
while(num1 > 0) {
arr[i++] = num1 % 10;
num1 /= 10;
}
while(num2 > 0) {
arr[i++] = num2 % 10;
num2 /= 10;
}
if(isDup(arr) == false) {
System.out.println(age);
}
}

}

//判断数组arr中是否存在相同的数
static boolean isDup(int[] arr) {
int i, j;
for(i=0; i<arr.length-1; i++) {
for(j=i+1; j<arr.length; j++) {
if(arr[j] == arr[i]) {
return true;
}
}
}
return false;
}
}


运行结果:

18

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
侠义南宫天诺
2016-05-26 · TA获得超过415个赞
知道小有建树答主
回答量:349
采纳率:56%
帮助的人:167万
展开全部
#include <stdio.h>
int main(){
int i,j,c[10]={0};
char a[11],b[10],v=1;
for(i=11;i<99;i++){
sprintf(a,"%d",i*i*i);
sprintf(b,"%d",i*i*i*i);
for(j=0;j<4;j++)
c[a[j]-48]=1;
for(;j<10;j++)
c[b[j]-48]=1;
for(j=0;j<10;j++){
if(c[j]==0)
v=0;
}
if(v==1&&strlen(a)==4&&strlen(b)==6)
break;
v=1;
}
printf("年龄为%d",i);
return 0;
}
追答
C语言
他刚好成年
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MM向前冲喲嘿哟
2021-03-22
知道答主
回答量:1
采纳率:0%
帮助的人:500
展开全部
import java.util.*;
/*
* 暴力枚举
*
*
* 真题:年龄谜题
美国数学家维纳(N.Wiener)智力早熟,11 岁就上了大学。他曾在 1935~1936 年应
邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是
有人询问他的年龄,他回答说:“我年龄的立方是个 4 位数。我年龄的 4 次方是个
6 位数。这 10 个数字正好包含了从 0 到 9 这 10 个数字,每个都恰好出现 1 次。”
请你推算一下,他当时到底有多年轻。
*/
public class Main {
public static void main(String[] args) {
String s;
for (int i = 1; i < 100; i++) {
s = "" + i * i * i + i * i * i * i;
if (test(s) == false) {
continue;
}
System.out.println(i);
}
}
private static boolean test(String s) {
if (s.contains("0") && s.contains("1") && s.contains("2") && s.contains("3") && s.contains("4")
&& s.contains("5") && s.contains("6") && s.contains("7") && s.contains("8") && s.contains("9")) {
return true;
}
return false;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星座文化小达人
2018-05-14 · 这是一家非常神奇的店铺
星座文化小达人
采纳数:7 获赞数:6

向TA提问 私信TA
展开全部

public class Test {

public static void main(String[] args) {
for (int i = 1; i < 100; i++) {
String a = ""+(int) Math.pow(i, 3);
String b = ""+(int) Math.pow(i, 4);
if(a.length()==4&&b.length()==6&&f(a+b)){
System.out.println(i);
break;
}
}
}
private static boolean f(String str) {
for (int i = 0; i <= 9; i++) {
if(-1==str.indexOf(""+i)){
return false;
}
}
return true;
}

}


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式