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

精贴 置顶
1466 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-06-25
.NET后台写JS代码 2011-11-03
网站地址多出jdfwkey的问题解析及... 2010-08-25
数据库xxx的日志已满,请备份该数... 2013-07-19
百度、google、Yahoo网站地图制作... 2011-01-30
<a>标签的伪类书写顺序问题... 2010-09-04
什么是长尾关键词? 2010-09-24
CEO名言 2010-08-31
Mysql 主从数据库同步 2010-09-12
用ASP实现网页BBS 2010-11-01
博主推荐
本个人博客微信公众平台上线啦~~... 2013-10-13
饼哥网络互联上线啦~~要买域名空... 2013-09-20
网站title标题如何正确修改不会被... 2013-08-26
饼哥通讯录系统上线啦,欢迎大家... 2013-08-24
ASP .NET MYSQL 的简单分页 并不... 2013-08-19
网站有弹窗广告这样的站点,百度... 2013-08-17
做淘宝SEO优化需要注意的8大问题 2013-08-17
淘宝网怎么做SEO优化 2013-08-17
站长们要学习的“苍井空精神” 2013-08-17
苹果公司今日发布了iOS 7第五个开... 2013-08-07
随便看看
php获取当前url完整地址 2010-10-12
C#正则表达式小结 2011-01-08
数据库查询语言(2) 2010-10-23
一、Web Service简介 2010-09-02
几个extjs 惯用操作 2013-06-27
URL转义字符 2010-12-07
X-UA-Compatible 2013-10-23
Asp.net 2.0 Treeview 无限级无刷... 2010-09-11
使用 Bulk Copy 将大量数据复制到... 2010-09-11
适用javaScript技术总结:屏蔽类 2013-06-27
RSS新闻
传媒新闻
CSDN
八卦新闻
女性新闻
台湾新闻
互联网
军事-新浪博客
IT-新浪博客
汽车新闻
游戏新闻
国际新闻
国内新闻
体育新闻
我的微博
北京 上海 杭州 深圳 广州 成都