/*======================================================================
比饭量
总时间限制: 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计算概论-比饭量【枚举法、信息数字化】的更多相关文章

  1. OpenJudge计算概论-取石子游戏

    OpenJudge计算概论-取石子游戏[函数递归练习] /*====================================================================== ...

  2. OpenJudge计算概论-完美立方【暂时就想到了枚举法了】

    /*===================================== 完美立方 总时间限制: 1000ms 内存限制: 65536kB 描述 a的立方 = b的立方 + c的立方 + d的立 ...

  3. Openjudge计算概论——数组逆序重放【递归练习】

    /*===================================== 数组逆序重放 总时间限制:1000ms 内存限制:65536kB 描述 将一个数组中的值按逆序重新存放. 例如,原来的顺 ...

  4. OpenJudge计算概论-计算书费

    /*============================================== 计算书费 总时间限制: 1000ms 内存限制: 65536kB 描述 下面是一个图书的单价表: 计算 ...

  5. OpenJudge 计算概论1007:点评赛车

    总时间限制: 1000ms 内存限制: 65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的:2)B说:4号赛车是最好的:3)C说:3号赛车不是最好的:4)D说: B说错了.事实上只 ...

  6. OpenJudge计算概论-最高的分数

    /*======================================================== 最高的分数 总时间限制: 1000ms 内存限制: 65536kB 描述 孙老师 ...

  7. OpenJudge计算概论-称体重【枚举法、信息数字化】

    /*====================================================================== 称体重 总时间限制: 1000ms 内存限制: 655 ...

  8. OpenJudge计算概论-求特殊自然数【枚举法】【将整数转成字符串】

    /*======================================================================== 求特殊自然数 总时间限制: 1000ms 内存限制 ...

  9. Openjudge计算概论-求序列中的众数

    /*===================================== 求序列中的众数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个长度为N的整数序列 (不多于128 ...

随机推荐

  1. EF中逆变和协变

    EF中的增删改查: 实现步骤: 1.声明一个EF的上下文. bjhksjEntities dbContext = new bjhksjEntities(); 2.声明一个实体. HKSJ_USERS ...

  2. UILocalNotification详解

    以下内容来自网络 本地Notification所使用的对象是UILocalNotification,UILocalNotification的属性涵盖了所有处理Notification需要的内容.UIL ...

  3. LCA(Tarjan)

    program LCA(Tarjan); type arr=record u,v,w,next:longint; end; ; maxm=; ..maxm*] of arr; last,lasq,an ...

  4. CI控制器的继承问题

    在项目中经常用到这样一种情况,后台中每个页面都要判断Session来确定用户是否登陆状态.对于在Codeigniter中,那么就会考虑每个控制器继承一个公用控制器. 比如:AdminBase 为应用后 ...

  5. [转]在Windows中配置Rsync同步

    在Windows中配置Rsync同步 Rsync是一款不错的文件免费同步软件,可以镜像保存整个目录树和文件系统,同 时保持原来文件的权限.时间.软硬链接.第一次同步时 rsync 会复制全部内容,下次 ...

  6. Http权威指南(一)---读书笔记

    Chart1 ====概述==== 最简单的的资源是web服务器文件系统中的静态文件.当然可以上动态,但要经过网关?(不确定) 下面见图: 2.  URI(uniform Resource Ident ...

  7. Python 如何跳出多重循环

    Python 如何跳出多重循环 抛异常 return

  8. Xen虚拟机磁盘镜像模板制作(一)—Windows Server 2008(2012)

    这段时间一直在研究如何制作一个适合Xen虚拟化的Windows Server 2008(2012)磁盘镜像,中间虽然遇到了一些阻挠,不过最终还是顺利解决,成功制作出了Xen Windows Serve ...

  9. PAT (Basic Level) Practise:1008. 数组元素循环右移问题

    [题目连接] 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… A ...

  10. C# 读取文本文档(转)

    1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出. byte[] byData = ...