一道趣味编程题..... c++/c

精贴 置顶
914 0

问题的提出:四位分别来自中国、美国、俄罗斯、加拿大的小学生都以自己的国土面积大而骄傲不已,
但是他们想知道到底谁的国土最大,谁的最小,他们的判断如下:
加拿大学生:加拿大最大,美国最小,俄罗斯第三。
美国学生:美国最大,加拿大最小,俄罗斯第二,中国第三。
俄罗斯学生:俄罗斯最大,中国最小,美国第二,加拿大第三。
中国学生:美国最小,加拿大第三。
他们互不相让,最后老师下定结论:对于上述四国面积的判断,他们每人只判断对了一个国家。对于老师的提示,四位小学生还是绞尽脑汁推断不出到底是谁的国土最大,谁的最小!现请编制程序告诉四位小学生正确顺序。
提示: 这是一个智力判断题,可用穷举法解。难点是找到这四个人判断的表达式。

-------------------------------------------------------------------------------------------

// CountryQuestion.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "stdarg.h"
#include "conio.h"

#define CHINA 1
#define CANADA 2
#define AMERICA 3
#define RUSSIA 4

int CheckOnly1Right(int rightans, const char* format, ...)
{
int country;
const char* p = format;
int count = 0;
int mask;
va_list(vars);
va_start(vars, format);
while (*p)
{
country = va_arg(vars, int);
mask = (rightans >> ((*p - '1') * 3)) & 7;
if (mask == country) count++;
p++;
}
va_end(vars);
return (count == 1);
}

int main(int argc, char* argv[])
{
int i1, i2, i3, i4;
int ans;
for ( i1 = 0; i1 < 4; i1++ )
for ( i2 = 0; i2 < 4; i2++ )
for ( i3 = 0; i3 < 4; i3++ )
for ( i4 = 0; i4 < 4; i4++ )
{
if (i1 == i2 || i1 == i3 || i1 == i4 || i2 == i3 || i2 == i4 || i3 == i4) continue;
/*
中国排在第i1(+1)位,加拿大排在第i2(+1)位...
*/
ans = CHINA << (i1 * 3);
ans |= CANADA << (i2 * 3);
ans |= AMERICA << (i3 * 3);
ans |= RUSSIA << (i4 * 3);
/*
加拿大学生:加拿大最大,美国最小,俄罗斯第三。
美国学生:美国最大,加拿大最小,俄罗斯第二,中国第三。
俄罗斯学生:俄罗斯最大,中国最小,美国第二,加拿大第三。
中国学生:美国最小,加拿大第三。
*/
if (CheckOnly1Right(ans, "143", CANADA, AMERICA, RUSSIA)
&& CheckOnly1Right(ans, "1423", AMERICA, CANADA, RUSSIA, CHINA)
&& CheckOnly1Right(ans, "1423", RUSSIA, CHINA, AMERICA, CANADA)
&& CheckOnly1Right(ans, "43", AMERICA, CANADA))
{
printf("China %dn", i1 + 1);
printf("Canada %dn", i2 + 1);
printf("America %dn", i3 + 1);
printf("Russia %dn", i4 + 1);
//break;
}
}
getch();
return 0;
}

用VC6.0在Console Application项目中编译通过

  • 没有任何评论
今日天气 ···

···

···

···

热门排行
CSS cursor鼠标样式一览表 2012/6/25
.NET后台写JS代码 2011/11/3
网站地址多出jdfwkey的问题解析及... 2010/8/25
百度、google、Yahoo网站地图制作... 2011/1/30
数据库xxx的日志已满,请备份该数... 2013/7/19
<a>标签的伪类书写顺序问题... 2010/9/4
CEO名言 2010/8/31
什么是长尾关键词? 2010/9/24
Mysql 主从数据库同步 2010/9/12
用ASP实现网页BBS 2010/11/1
博主推荐
网站title标题如何正确修改不会被... 2013/8/26
ASP .NET MYSQL 的简单分页 并不... 2013/8/19
网站有弹窗广告这样的站点,百度... 2013/8/17
做淘宝SEO优化需要注意的8大问题 2013/8/17
淘宝网怎么做SEO优化 2013/8/17
站长们要学习的“苍井空精神” 2013/8/17
苹果公司今日发布了iOS 7第五个开... 2013/8/7
小米1刷V5系统WIFI不能连接解决办... 2013/8/1
本博客手机版上线咯!会员后台也... 2013/7/31
Win7系统环境安装配置PHP开发环境... 2013/7/29
随便看看
Eclipse快捷键大全 2010/8/31
如何增加导入链接? 2010/9/19
URL转义字符 2010/12/7
网站SEO分析之团购网 2010/9/27
使用asp.net 开发的网页程序,使... 2010/9/4
关于不带www的域名 2010/9/21
flash快捷键大全 2010/9/9
什么是死链接? 2010/9/18
js实现复制网页文章事自动加入版... 2010/11/22
个人博客讲解百度排名区分大小写 2013/8/30
北京 上海 杭州 深圳 广州 成都