OpenJudge计算概论-称体重【枚举法、信息数字化】
/*======================================================================
称体重
总时间限制: 1000ms 内存限制: 65536kB
描述
赵、钱、孙、李四个人中既有大人也有小孩,给他们称体重时发现,他们每个人的体重都不一样,且体重(单位:公斤)恰好是10的整数倍,且他们的体重都不高 于50公斤,已知赵、钱两人的体重之和恰好等于孙、李两人的体重之和; 赵、李两人的体重之和大于孙、钱两人的体重之和,并且赵、孙俩人的体重之和还小于钱的体重。请编写一个程序,按照由大到小的顺序,打印出四人的姓氏的首字 母和体重数(中间用空格隔开,每人一行)。
输入
无
输出
打印出四人的姓氏的首字母和体重数(中间用空格隔开,每人一行)。
样例输入
无
样例输出
z 10
q 20
s 30
l 40
(以上输出仅用于说明格式)
========================================================================*/
这个题思路是枚举,对枚举得到的解排序并输出,然后继续枚举找下一个解并排序输出,往复循环。
#include<iostream>
using namespace std;
struct person
{
int weight;
char name;
};
int main()
{
int a[]={};//int z,q,s,l;
int flag1,flag2,flag3;
int i,j,flag;
struct person b[],t;
for(a[]=;a[]<=;a[]=a[]+)
{
for(a[]=;a[]<=;a[]=a[]+)
{
if(a[]==a[]) continue;
for(a[]=;a[]<=;a[]=a[]+)
{
if(a[]==a[]||a[]==a[]) continue;
for(a[]=;a[]<=;a[]=a[]+)
{
if(a[]==a[]||a[]==a[]||a[]==a[]) continue;
flag1=;flag2=;flag3=;
if(a[]+a[]==a[]+a[]) flag1=;
if(a[]+a[]>a[]+a[]) flag2=;
if(a[]+a[]<a[]) flag3=;
if(flag1+flag2+flag3==)
{
for(i=;i<;i++)
{
b[i].weight=a[i];
}
b[].name='z';
b[].name='q';
b[].name='s';
b[].name='l';
//下面是对数组b进行的冒泡排序
for(i=;i<;i++)
{
flag=;
for(j=;j<-i;j++)
{
if(b[j].weight<b[j+].weight)
{
flag=;
t=b[j];
b[j]=b[j+];
b[j+]=t;
}
}
if(flag) break; //if(flag==1) break;
}
for(i=;i<;i++)
{
cout<<b[i].name<<' '<<b[i].weight<<endl;
}
}
}
}
}
}
return ;
}
为何不是直接对a数组进行排序呢?假如直接对a数组排序,那就会在排序时改变了四层for循环的循环变量的值,造成循环流程混乱,无法寻找下一组解,结果莫名其妙了。
为何非要用a数组而不是用简单变量来代表那四个人呢?这个问题嘛……其实一开始的想法是没有使用b数组和结构体的呵呵,后来改来改去就变成现在这个样子了。其实都OK了。
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 ...
随机推荐
- php大力力 [011节] PHP常量使用场景
2015-08-24 php大力力011. PHP常量使用场景 $root = "dali"; define("ROOT",10) echo "ROO ...
- Code is not literature
http://www.gigamonkeys.com/code-reading/ I have started code reading groups at the last two companie ...
- BZOJ 3398 牡牛和牝牛
dp. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 【Tsinghua OJ】循环移位(Cycle)
Description Cycle shifting refers to following operation on the sting. Moving first letter to the en ...
- html释疑
解析<button>和<input type="button"> 的区别(转) 一.定义和用法 <button> 标签定义的是一个按钮. 在 b ...
- WP8.1 双击两次返回键退出程序
在实现Windows Phone上实现点按两次返回键退出程序, 一种方法是使用Coding4Fun提供的ToastPrompt, 使用方法如下: 1. 安装引用, 打开Package Manager ...
- 重学STM32---(三) 中断分组和优先级
看了大半天,终于把原子哥的例程中的中断分组和优先级看懂了,勉勉强强知道了怎么设置中断分组和优先级,,不容易啊.下面就是我收集的资料及我的理解 分组不是很难,就是有一点知道就就全部明白了: // 设置N ...
- I.MX6 ubuntu-core-14.04 Apache php mysql Qt5
/*************************************************************************** * I.MX6 ubuntu-core-14. ...
- php中能够获取到某一网站内容的方法
方法一:file_get_contents 函数 example: <?php $url = "http://www.cnblogs.com"; $contents = fi ...
- Think Python - Chapter 8 - Strings
8.1 A string is a sequenceA string is a sequence of characters. You can access the characters one at ...