您的位置:首页 > 其它

3位老师对某次数学竞赛进行了预测。他们的预测如下。

2016-04-07 10:00 169 查看
甲说:学生A得第一名,学生B得第三名。

乙说:学生C得第一名,学生D得第四名。

丙说:学生D得第二名,学生A得第三名。

竞赛结果表明,他们都说对了一半,并且无并列名次,试编程输出a,b,c,d各自得名次。

分析:这题和上一题差不多,只不过上一题只需要一个参数(小偷的编号),而这一题需要4个参数(一、二、三、四名)。

需要注意的是在判断语句中“加号”的优先级是高于“==”,所以下面的判断条件要加括号。((r1 == 1) + (r2 == 3) == 1 && (r3 == 1) + (r4 == 4) == 1 && (r4 == 2) + (r1 == 3) == 1)

另外:1、2、3、4四个数的全排列可以参考我的这篇博客:STL中计算排列组合关系的算法,来对下面得算法进行改进

#include <iostream>
#include <vector>
using namespace std;

int main()
{
int r4;
for (int r1=1;r1<=4;++r1)
{
for (int r2=1;r2<=4;++r2)
{
if (r1 == r2)
{
continue;
}
for (int r3 = 1;r3<=4;++r3)
{
if (r3 == r1 || r3 == r2)
{
continue;
}
r4 = 10-r1-r2-r3;
if ((r1 == 1) + (r2 == 3) == 1 && (r3 == 1) + (r4 == 4) == 1 && (r4 == 2) + (r1 == 3) == 1)
{
cout<<r1<<'\t'<<r2<<'\t'<<r3<<'\t'<<r4<<endl;
}
}
}
}
return 0;
}


输出: 4 3 1 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: