编程点将台(41)
软件世界
编程点将台:一个编程爱好者学习、动手、交流的天地。注重培养编程思想,强调多种解法。
参与方式:
在每期的请战帖中向各路编程好手发出邀请,来信请寄 liz@cpcw.com(请在来信中写明通讯地址和联系方式,不限开发工具和语言),为照顾拿到报纸较晚的读者,我们会在隔一周后再公布结果。
直接的奖励方式:
将来信中的优秀读者大名公布在点将录中,上榜的读者作品还将放在网上供大家学习交流,另外还将获得50元现金奖励。
请战帖
第41期题目由湖南的杨立强读者提供:将阿拉伯数字转换为大写人民币数字。
点将台
第38期请战帖题目回顾:三对新人参加婚礼,假设新郞分别为A、B、C,新娘分别为X、Y、Z。在来宾中有人不知道他们是谁和谁结婚,于是就询问了六位新人中的三位,但听到的回答是这样的:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。这人听后知道他们全在开玩笑,都说的是假话。请编程找出三对新人分别是谁和谁结婚。
基本的思路是根据三位新人的玩笑话并结合同性不结婚的原则,依靠循环排除不可能的几种情况,从而得到正确的答案。另外,有些读者还对题目进行了挖掘,利用了矩阵、数组和各种搜索等灵巧的解法。限于报纸篇幅,在这里给出一个基本的做法,更多的作品请在http://www.cpcw.com/41/rec.rar下载参考:
#include<stdio.h>
void main()
{
int A,B,C,X,Y,Z;
X=1;
Y=2;
Z=3;
for(A=1;A<=3;A++)
for(B=1;B<=3;B++)
for(C=1;C<=3;C++)
if((A!=X)&(X!=C)&(C!=Z)&(A!=B)&(B!=C)&(A!=C)) //A说他和X结婚,X说她和C结婚,C说他和Z结婚,都是错的!并且同性不结婚
{
if (A==1)
printf(“A和X结婚\n”);
if (A==2)
printf(“A和Y结婚\n”);
if (A==3)
printf(“A和Z结婚\n”);
if (B==1)
printf(“B和X结婚\n”);
if (B==2)
printf(“B和Y结婚\n”);
if (B==3)
printf(“B和Z结婚\n”);
if (C==1)
printf(“C和X结婚\n”);
if (C==2)
printf(“C和Y结婚\n”);
if (C==3)
printf(“C和Z结婚\n”);
}
}
获奖读者:李娜 刘栋
另外,出题并给出详尽解答的军师杨立强也获得50元现金奖励,获奖读者和更多读者作品请在http://www.cpcw.com/41/rec.rar下载参考。