关于数字的智力题-三个女儿的年龄

题目:
一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?
解答:
假设三个女儿按照年龄从小到大的排序时x,y,z。则1<=x,y,z<=11,x+y+z=13。能满足这两个条件的有很多组合,例如11(1,1,11),32(1,4,8)等。明显11(1,1,11)这些的组合是不符合实际情况的,应该事先被排除。这里假设经理比最大年龄的女儿至少大18岁。列举满足条件的组合有
  27(1,3,9)
  32(1,4,8)
  35(1,5,7)
  36(1,6,6)
  36(2,2,9)
  48(2,3,8)
  56(2,4,7)
  60(2,5,6)
  63(3,3,7)
  72(3,4,6)
  75(3,5,5)
  80(4,4,5)

因为题目中下属知道了经理的年龄,但是依然推不出三个女儿的年龄,则说明经理的年龄在这种情况下的组合应该有两组以上,则上述组合只有36(1,6,6)和36(2,2,9)符合题意。又因为经理说只有一个女儿的头发是黑的,则可进一步排除而得到答案是36(2,2,9)。

源代码:

#include<stdio.h>
#include<stdlib.h>
#define MAX 20


struct ages{
int x;
int y;
int z;
};


int main(){


struct ages nums[MAX];
int tmp[MAX];
int i,j,k,record=0;
int dadage;
//3层for的嵌套循环是查找符合条件的所有可能
for(i=1;i<=11;i++){
for(j=i;j<=11;j++){
for(k=j;k<=11;k++){
if( (i+j+k) == 13 ){
dadage = i * j * k;
if(dadage >= 18){
nums[record].x = i;
nums[record].y = j;
nums[record].z = k;
tmp[record]=dadage;
record++;
}
}
}
}
}


for(i = 0;i < record-1; i++ ){       //取出相同年龄的两个下标
if(tmp[i] == tmp[i+1]){
break;
}
else
continue;
}
if( nums[i].z > nums[i].y ){
printf("the three daughter age is:%d,%d,%d\n",nums[i].x,nums[i].y,nums[i].z);
}else
printf("the three daughter age is:%d,%d,%d\n",nums[i+1].x,nums[i+1].y,nums[i+1].z);
getchar();
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值