OpenJudge计算概论-比饭量【枚举法、信息数字化】
2013-12-10 15:51
381 查看
/*====================================================================== 比饭量 总时间限制: 1000ms 内存限制: 65536kB 描述 3个人比饭量,每人说了两句话: A说:B比我吃的多,C和我吃的一样多 B说:A比我吃的多,A也比C吃的多 C说:我比B吃得多,B比A吃的多。 事实上,饭量和正确断言的个数是反序的关系。 请编程按饭量的大小输出3个人的顺序。 输入 无输入 输出 按照饭量大小输出3人顺序,比如: ABC 样例输入 无 样例输出 无 解析:这个题目在OpenJudge提交时,题目意思不清晰,应该按饭量从小到大的顺序输出字母 用三重for循环枚举所有可能的解 对每一种可能的解计算每一个人正确断言的数量 然后把饭量、正确断言数量分别打包到数组(把人对应的编号一起封装) 对两个数组进行排序(一个由大到小,另一个由小到大) 检测两个数组每一个元素对应的人名字是否一致,若所有人的名字一致,得到一个可行解。输出 继续循环寻找下一个可行解 ========================================================================*/
#include<iostream> using namespace std; struct person { int n;//饭量或者断言数量 char name;//名字 }; int main() { int a,b,c;//三者的范围都是1~3,这里把a、b、c的值看作他们的饭量(不一定要用1~3,只要能区分出三个数的大小就行了) //当然,也可以换一下思路,用a、b、c表示饭量排名 int A,B,C;//表示断言正确的数量 struct person x[3],y[3],t; int i,j,flag; for(a=0;a<3;a++) { for(b=0;b<3;b++) { for(c=0;c<3;c++) { A=(b>a)+(c==a); B=(a>b)+(a>c); C=(c>b)+(b>a); /*假如三个人的饭量不会相等、三个人的断言正确数量也不会相等, 下面就判断a+A、b+B、c+C是否都相等,都等于3就行了。 但是这个题目,三个人饭量可能相等,断言正确数量也可能一样,必需用其他方式*/ //下面把a、b、c、A、B、C分别放到数组x、y当中。 然后对x、y数组进行排序 x[0].n=a;x[0].name='A'; x[1].n=b;x[1].name='B'; x[2].n=c;x[2].name='C'; y[0].n=A;y[0].name='A'; y[1].n=B;y[1].name='B'; y[2].n=C;y[2].name='C'; //对x数组按元素的饭量从大到小排序,对y数组按元素的断言正确数量从小到大排序 for(i=1;i<3;i++) { flag=1; for(j=0;j<3-i;j++) { if(x[j].n<x[j+1].n) { flag=0; t=x[j]; x[j]=x[j+1]; x[j+1]=t; } } if(flag) break; //if(flag==1) break; } for(i=1;i<3;i++) { flag=1; for(j=0;j<3-i;j++) { if(y[j].n>y[j+1].n) { flag=0; t=y[j]; y[j]=y[j+1]; y[j+1]=t; } } if(flag) break; //if(flag==1) break; } //从头到尾检查x和y数组每一个元素对应的是否是同一个人 for(i=0;i<3;i++) { if(x[i].name!=y[i].name) break; } if(i==3) {//输出结果 for(i=2;i>=0;i--) cout<<x[i].name; cout<<endl; } } } } return 0; }
相关文章推荐
- Openjudge-计算概论(A)-比饭量
- Openjudge-计算概论(A)-大象喝水
- Openjudge-计算概论(A)-回文串判断
- 【openjudge 计算概论(A)】[函数递归练习(4)]
- Openjudge-计算概论(A)-计算三角形面积
- Openjudge-计算概论(A)-找和为K的两个元素
- OpenJudge计算概论-买房子
- 【openjudge 计算概论(A)】[函数递归练习(3)]
- Openjudge-计算概论(A)-鸡兔同笼
- Openjudge-计算概论(A)-计算书费
- 【openjudge 计算概论(A)】[指针练习]
- 【openjudge 计算概论(A)】[函数递归练习(2)]
- openjudge 计算概论-数组练习-距离排序
- Openjudge-计算概论(A)-判断闰年
- Openjudge-计算概论(A)-求平均年龄
- Openjudge-计算概论(A)-人民币支付
- OpenJudge计算概论-骑车与走路
- 【openjudge 计算概论(A)】[函数递归练习(1)]
- openjudge 计算概论基础编程练习(控制成分)
- Openjudge-计算概论(A)-分数求和