CC++语言经典、实用、趣味程序设计编程百例精解(18)

CC++语言经典、实用、趣味程序设计编程百例精解(18)

ID:43323968

大小:136.12 KB

页数:8页

时间:2019-09-29

CC++语言经典、实用、趣味程序设计编程百例精解(18)_第1页
CC++语言经典、实用、趣味程序设计编程百例精解(18)_第2页
CC++语言经典、实用、趣味程序设计编程百例精解(18)_第3页
CC++语言经典、实用、趣味程序设计编程百例精解(18)_第4页
CC++语言经典、实用、趣味程序设计编程百例精解(18)_第5页
资源描述:

《CC++语言经典、实用、趣味程序设计编程百例精解(18)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、86•白动发牌一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。*问题分析与算法设计按照打桥牌的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数

2、字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,…然后从52张牌中随机的为每个人抽牌。这里采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。*程序与程序注释#include#includeintcomp(constvoid*j,constvoid*i);voidp(intb[]zcharn[]);intmain(void){staticcharn[]={,2,3,/,4,z,5,z,6,7,/,8,/,9,

3、,,Tz,J,/,Q,,,K7A,};inta[53],bl[13]zb2[13],b3[13]zb4[13];intbll=0,b22=0,b33=0,b44=0,t=l,m,flagzi;while(t<=52)/*控制发52张牌*/{m=rand()%52;/*产生0到51之间的随机数*/for(flag=lj=l;i<=t&&flag;i++)/*查找新产生的随机数是否已经存在*/if(m==a[i])flag=O;/*flag=l:产生的是新的随机数flag=O:新产生的随机数己经存在

4、*/if(flag){a[t++]=m;/*如果产生了新的随机数,则存入数组*/if(t%4==0)bl[bll4-4-]=a[t-l];/*根据t的模值,判断当前*/elseif(t%4==l)b2[b22++]=a[t-l];/*的牌应存入哪个数组中*/elseif(t%4==2)b3[b33++]=a[t-l];elseif(t%4==3)b4[b44++]=a[t-l];}}qsort(bl,13,sizeof(int)zcomp);/*将每个人的牌进行排序*/qsort(b2,13,s

5、izeof(int),comp);qsort(b3z13,sizeof(int),comp);qsort(b4,13,sizeof(int),comp);p(blzn);p(b2,n);p(b3,n);p(b4,n);/*分别打印每个人的牌*/return0;}voidp(intb[],charn[]){inti;printf(H06“);/*打印黑桃标记*/for(i=0;i<13;i++)/*将数组中的值转换为相应的花色*/if(b[i]/13==0)printf(H%c,,/n[b

6、[i]%13]);/*该花色对应的牌*/printf(u03");/*打印红桃标记*/for(i=0;i<13;i++)if((b[i]/13)==l)printf("%c[b[i]%13]);printf(H04“);/*打印方块标记*/for(i=0;i<13;i++)if(b[i]/13==2)printfC*%c,,/n[b[i]%13]);printf(M05“);/*打印梅花标记*/for(i=0;i<13;i++)if(b[i]/13==3

7、

8、b[i]/

9、13==4)printf(n%c”小[b[i]%13]);printfCAn11);}intcomp(constvoid*j,constvoid*i)/*qsort调用的排序函数*/{return(*(int*)i-*(int*)j);}86•黑白子交换有三个白子和三个黑子如下图布置:oOO・•••游戏的目的是用最少的步数将上图屮片子和黑子的位置进行交换:•••.OOO游戏的规则是:(1)一次只能移动一个棋子;(2)棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格,但不能向后跳,也不能跳过

10、两个子。请用计算机实现上述游戏。*问题分析与算法设计计算机解决胜这类问题的关键是要找出问题的规律,或者说是要制定一套计算机行动的规则。分析本题,先用人来解决问题,可总结出以下规则:(1)黑子向左跳过白子落入空格,转(5)(2)白子向右跳过黑子落入空格,转(5)(3)黑子向左移动一格落入空格(但不应产生棋子阻塞现象),转(5)(4)白子向右移动一格落入空格(但不应产牛棋子阻塞现萌),转(5)(1)判断游戏是否结束,若没有结束,则转(1)继续。所谓的''阻塞〃现象就是:在移动棋子的过程中,两个尚未到

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。