三个孩子年龄相乘是36,将三个孩子的年龄从大到小输出的智力编程题
2017-09-19 22:04
489 查看
问题
一普查员问一位女士,“你有多少个孩子,他们多少岁?”女士回答:“我有三个孩子,他们的岁数相乘是36,岁数相加就等于隔离间屋的门牌号码.”普查员立刻走到隔邻,看了一看,回来说:”我还需要多少资料.”女士回答:“我现在很忙,我最大的孩子正在楼上睡觉.”普查员说:”谢谢,我己知道了
问题:那三个孩子的岁数是多少?
思路(引用)
首先考虑将36分解成三个因子相乘,及获取不重复排列。
岁数相加是门牌号,普查员此时是能看到门牌号的,但是此时并不能得到结果,那么说明问题的解,存在于多组和相等的门牌号中。
最大的孩子在睡觉,能得到结果,可得知,上面求得的多组和相等的排列中,排列中有且只有一个最大值。该排列从大到小输出,就是问题的解。
一普查员问一位女士,“你有多少个孩子,他们多少岁?”女士回答:“我有三个孩子,他们的岁数相乘是36,岁数相加就等于隔离间屋的门牌号码.”普查员立刻走到隔邻,看了一看,回来说:”我还需要多少资料.”女士回答:“我现在很忙,我最大的孩子正在楼上睡觉.”普查员说:”谢谢,我己知道了
问题:那三个孩子的岁数是多少?
思路(引用)
首先考虑将36分解成三个因子相乘,及获取不重复排列。
岁数相加是门牌号,普查员此时是能看到门牌号的,但是此时并不能得到结果,那么说明问题的解,存在于多组和相等的门牌号中。
最大的孩子在睡觉,能得到结果,可得知,上面求得的多组和相等的排列中,排列中有且只有一个最大值。该排列从大到小输出,就是问题的解。
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int n=36; int a[20][3]; int flag=0; int i,j,k,m,l; int firstIndex=0; for(i=1; i<=sqrt(n); i++) { //这里是第一位数 m=n; if(n%i==0) { a[firstIndex][flag]=i; m=n/i; l=m; } for(j=i; j<=sqrt(n); j++) { //把其他两位数放进来。 if(j<=sqrt(l)) { if(l%j==0) { flag++; a[firstIndex][flag]=j; l/=j; flag++; a[firstIndex][flag]=l; firstIndex++; a[firstIndex][0]=i; flag=0; l=m; } } } } int sum[20]= {0}; int max=0; int resultIndex[10]; int resultFlag=0; for(i=0; i<firstIndex; i++) { for(j=0; j<3; j++) { sum[i]+=a[i][j]; } } //得到sum数组 找到重复的数组。 for(i=0; i<firstIndex; i++) { for(j=0; j<firstIndex; j++) { if(sum[i]==sum[j]&&i!=j) { //我只把第一个留下,反正都会全部遍历,这样得到的结果便不会重复 resultIndex[resultFlag]=i; resultFlag++; } } } //找到存在唯一最大值的样本 for(i=0; i<resultFlag; i++) { int bRepetition=0; max=0; for(k=0; k<3; k++) { if(max<a[resultIndex[i]][k]) max=a[resultIndex[i]][k]; } for(k=0;k<3;k++) { if(max==a[resultIndex[i]][k]) bRepetition++; } //说明这里就是要输出的解 if(bRepetition==1) { //从大到小,冒泡下 for(j=2;j>=1;--j) { for(k=1;k<=j;++k) { int temp; if(a[resultIndex[i]][k]>a[resultIndex[i]][k-1]) { temp=a[resultIndex[i]][k]; a[resultIndex[i]][k]=a[resultIndex[i]][k-1]; a[resultIndex[i]][k-1]=temp; } } } for(k=0;k<3;k++) { printf("%d ",a[resultIndex[i]][k]); } } } return 0; }
相关文章推荐
- 智力推理:三个孩子的年龄分别是多少?
- 智力推理:三个孩子的年龄各自是多少?
- 关于数字的智力题-三个女儿的年龄
- 编程题:用二维字符串数组实现。从键盘输入三个学生姓名,并输出。
- 关于数字的智力题-三个女儿的年龄
- 特定字符输出及二分搜索 简单面试编程题
- 任给三个数字a,b,c,比较大小按照从大到小顺序输出
- 输入三个数,然后从大到小输出
- 输出三个数中较大的数字
- 将三个数按从大到小输出。
- 编程输出,第一行一个*,第二行两个*,每个星后面一个点,第三行三个星,每颗星后面两个点,以此类推,打印8行
- 第五周-raptor 输入三个整数 输出最大值
- ACM 4描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。输入 第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,
- 找出最小存首位和最大数存末位,写三个函数:输入、输出、处理。
- C++程序设计 期末考试 编程题#10 输出指定结果二
- Python三个整数x,y,z,请把这三个数由小到大输出(冒泡排序)
- 用排列组合的方式实现输入三个数据从大到小输出数据
- [置顶] 将三个数有小到大排序输出
- c语言输入三个分数,并进行按从高到低等级进行排序,再输出结果
- 第七周项目4输入三个整数,输出其中最大值