永发信息网

javascript的问题,3、牧师和司事(编程)

答案:1  悬赏:0  手机版
解决时间 2021-07-21 11:39
  • 提问者网友:玫瑰园
  • 2021-07-20 17:25

1、 牧师和司事(编程)

有一次,牧师对他的司事说:“今天,我遇到了我们堂区的三位居民。他们年龄的乘积是2450。你能告诉我他们个人的年龄吗?”

司事:不能。

牧师:我还告诉你他们的年龄之和是你的年龄的两倍,你能给我答案吗?

司事:还不能。

牧师:我再告诉你,其中年龄最大的那位比我年龄大。

司事:现在我需要的信息全都有了。

如果,我们假定这位牧师和司事都是数学高手。那么这三位居民的年龄各是多少?

最佳答案
  • 五星知识达人网友:老鼠爱大米
  • 2021-07-20 18:31

思路:
1.设三人年龄:x,y,z


2.首先,x,y,z必须满足条件:x*y*z = 2450 ,(x+y+z)为2的倍数


3.司事知道三人年龄之和为自身年龄两倍,但是还是不知道具体x,y,z为多少,说明满足以上条件的多组x,y,z中,有两组或两组以上的和为自身年龄。所以在编程中,将和相等的组去掉。


4.牧师说最大年纪的比自己年纪大,司事就知道答案,说明满足以上x,y,z的组中,只有一组其中一个数大于牧师年纪,也就是最大值。代码如下:


public class test{
public static int max(int x,int y,int z){
int temp = x;
if(y > temp)
temp = y;
if(z > temp)
temp = z;
return temp;
}//求三人之中最大值的函数
public static void main(String[]args){
int count = 0;
int flag = 0;
int temp = 0;
int[][]arr = new int[200][5];


//此处的200是凭借常识,一般人年纪不大于200岁,为了减少计算量,当然用2450也可以。
condition con = new condition();
for(int x = 1;x<200;x++)
for(int y = 1;y<200;y++)
for(int z = 1;z<200;z++)
if(con.condition1(x,y,z)*con.condition2(x,y,z)*con.condition3(x,y,z) == 1){


//三个条件均满足的,将x,y,z存于数组中
arr[count][0] = x;
arr[count][1] = y;
arr[count][2] = z;
arr[count][3] = x + y + z;
arr[count][4] = max(x,y,z);
count++;
}
for(int i = 0;i<count - 1;i++)
for(int j = i+1; j<count;j++)
if(arr[i][3] == arr[j][3]){
arr[i][3] = 0;
arr[j][3] = 0;
}


//如果有两组年龄和相等 ,那么将年龄和赋值为0,也就是去掉。
temp = arr[0][4];
for(int i = 1;i<count;i++){
if(arr[i][3] == 0 && arr[i][4]>temp){
flag = i;
}
}


//取所有组中,拥有最大年龄的一组。
System.out.println(arr[flag][0] + " " + arr[flag][1] + " " + arr[flag][2]);
}
}


class condition{
public int condition1(int x,int y,int z){
if(x*y*z == 2450)
return 1;
return 0;
}
public int condition2(int x,int y,int z){
if((x+y+z)%2 == 0)
return 1;
return 0;
}
public int condition3(int x,int y,int z){
if(x>=y&&y>=z)
return 1;
return 0;
}
}



结果:50,7,7,如有问题,加Q303620789

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯