OpenJudge计算概论-比饭量【枚举法、信息数字化】
/*======================================================================
比饭量
总时间限制: 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[],y[],t;
int i,j,flag;
for(a=;a<;a++)
{
for(b=;b<;b++)
{
for(c=;c<;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[].n=a;x[].name='A';
x[].n=b;x[].name='B';
x[].n=c;x[].name='C';
y[].n=A;y[].name='A';
y[].n=B;y[].name='B';
y[].n=C;y[].name='C';
//对x数组按元素的饭量从大到小排序,对y数组按元素的断言正确数量从小到大排序
for(i=;i<;i++)
{
flag=;
for(j=;j<-i;j++)
{
if(x[j].n<x[j+].n)
{
flag=;
t=x[j];
x[j]=x[j+];
x[j+]=t;
}
}
if(flag) break; //if(flag==1) break;
} for(i=;i<;i++)
{
flag=;
for(j=;j<-i;j++)
{
if(y[j].n>y[j+].n)
{
flag=;
t=y[j];
y[j]=y[j+];
y[j+]=t;
}
}
if(flag) break; //if(flag==1) break;
}
//从头到尾检查x和y数组每一个元素对应的是否是同一个人
for(i=;i<;i++)
{
if(x[i].name!=y[i].name) break;
}
if(i==)
{//输出结果
for(i=;i>=;i--)
cout<<x[i].name;
cout<<endl;
}
}
}
}
return ;
}
OpenJudge计算概论-比饭量【枚举法、信息数字化】的更多相关文章
- OpenJudge计算概论-取石子游戏
OpenJudge计算概论-取石子游戏[函数递归练习] /*====================================================================== ...
- OpenJudge计算概论-完美立方【暂时就想到了枚举法了】
/*===================================== 完美立方 总时间限制: 1000ms 内存限制: 65536kB 描述 a的立方 = b的立方 + c的立方 + d的立 ...
- Openjudge计算概论——数组逆序重放【递归练习】
/*===================================== 数组逆序重放 总时间限制:1000ms 内存限制:65536kB 描述 将一个数组中的值按逆序重新存放. 例如,原来的顺 ...
- OpenJudge计算概论-计算书费
/*============================================== 计算书费 总时间限制: 1000ms 内存限制: 65536kB 描述 下面是一个图书的单价表: 计算 ...
- OpenJudge 计算概论1007:点评赛车
总时间限制: 1000ms 内存限制: 65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的:2)B说:4号赛车是最好的:3)C说:3号赛车不是最好的:4)D说: B说错了.事实上只 ...
- OpenJudge计算概论-最高的分数
/*======================================================== 最高的分数 总时间限制: 1000ms 内存限制: 65536kB 描述 孙老师 ...
- OpenJudge计算概论-称体重【枚举法、信息数字化】
/*====================================================================== 称体重 总时间限制: 1000ms 内存限制: 655 ...
- OpenJudge计算概论-求特殊自然数【枚举法】【将整数转成字符串】
/*======================================================================== 求特殊自然数 总时间限制: 1000ms 内存限制 ...
- Openjudge计算概论-求序列中的众数
/*===================================== 求序列中的众数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个长度为N的整数序列 (不多于128 ...
随机推荐
- 6、C#基础整理(for 语句经典习题--for循环嵌套、穷举)
1.for循环嵌套----最基础题目:求阶乘的和 ; int n = int.Parse(Console.ReadLine()); ; i < n; i++) { ;//定义变量sum1,每次循 ...
- 10、SQL基础整理(约束2)
约束 除主键约束.外键约束外 唯一约束(主键列.索引列的候选索引) 设计---右键---索引/键---需要修改的列----是唯一的----忽略重复键 代码方式: cid varchar (20) ...
- 【转】博弈问题及SG函数(真的很经典)
博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...
- FTP服务器移动文件目录
已经可以移动文件了,原因是路径问题.还是用的Rename方法.原因是RenameTo=“”;这里的路径之前没包含文件名,而且相对路径和绝对路径都没弄对,所以之前一直不相信别人说的Rename可以移动文 ...
- 用正则表达式获取所有img标签
public static string ReplaceOrAddImageTitle(string content, string title) { Regex reg = new Regex(@& ...
- ubuntu中常用快捷键
本文转自 http://yife.im/ubuntu-terminal-shortcode/ 原文的格式会比较好看. Ubuntu终端常用的快捷键 Oct 3, 2013 • 23,469 views ...
- RESTful 杂文归集
Json格式与对象转换 org.codehaus.jackson.map.ObjectMapper 工具转json格式,进行接口文档书写工具http://editor.swagger.io/#/ ja ...
- JAVA存取PG大对象类型OID数据
转载地址:http://my.oschina.net/liuyuanyuangogo/blog/151537 pg用大对象存储二进制数据的老文档:http://jdbc.postgresql.org/ ...
- 【转】7 Tips to Speed Up Eclipse
技巧一:运行最新版本的JDK和Eclipse 通常,新版本的JDK和Eclipse都会有性能上的优化.请确保你使用的是64位Eclipse并且使用了Oracle的JDK.对于网络开发,需要使用Ecli ...
- ubuntu默认root密码
安装完Kubuntu后一直都是用我的用户名bbking登录, 一直没想到root的问题, 以为每次sudo输入的密码就是我的root密码. 刚才为了修改文件夹的所有者,想使用su root切换到roo ...