问题的提出:四位分别来自中国、美国、俄罗斯、加拿大的小学生都以自己的国土面积大而骄傲不已,但是他们想知道到底谁的国土最大,谁的最小,他们的判断如下:
加拿大学生:加拿大最大,美国最小,俄罗斯第三。
美国学生:美国最大,加拿大最小,俄罗斯第二,中国第三。中国学生:美国最小,加拿大第三。
他们互不相让,最后老师下定结论:对于上述四国面积的判断,他们每人只判断对了一个国家。对于老师的提示,四位小学生还是绞尽脑汁推断不出到底是谁的国土最大,谁的最小!现请编制程序告诉四位小学生正确顺序。
解答:这个问题我没思考出来,我想了两天,一直想建立一个类用来装国家和排名,始终没得到答案,后来看了答案,发现这竟然是个纯数字问题,答案挺简单,但是不太好想,贴出来供大家看看。
代码:
// test4_.cpp : 定义控制台应用程序的入口点。
//排序方法用的比较巧妙
//对齐方法用的也比较新setw(int n);
//算法的复杂度较高,需要改进
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str[4];
int a,b,c,d;//a:America b:Russia C:China d:Canada
for(a=1;a<=4;a++)
{
for(b=1;b<=4;b++)
{
if(a!=b)
{
for(c=1;c<=4;c++)
{
if(a!=c && b!=c)
{
d=10-a-b-c;
if((a==4) + (d==1) + (b==2)==1 &&
(a==1) + (d==4) + (b==2) + (c==3)==1 &&
(a==4) + (d==3)==1)
{
//cout<<a<<b<<c<<d<<endl;
str[a-1]="美国";
str[b-1]="俄罗斯";
str[c-1]="中国";
str[d-1]="加拿大";
cout<<left<<setw(15)<<"The first: "<<str[0]<<endl;
cout<<left<<setw(15)<<"The second: "<<str[1]<<endl;
cout<<left<<setw(15)<<"The third: "<<str[2]<<endl;
cout<<left<<setw(15)<<"The last: "<<str[3]<<endl;
}
}
}
}
}
}
system("pause");
return 0;
}
结果: