C语言给出任意4个数算24点,讨论24点算法。
討論24點算法。
24點是撲克牌游戲 玩法是:從一副撲克的A到10里隨意抽出4張牌
用‘加’’減‘‘乘’‘除’四個符號算出4個數是否等于24,是
的話成功,否的話失敗;
我用的是窮舉法!(源碼有點長)
就是窮舉出所有可能的算術式;
我們想設4張牌為W,X,Y,Z;
先把4張牌做排列組合:
如W;X;Y;Z; W;X;Z;Y; W;Y;X;Z;
W;Y;Z;X; W;z;x;y; w;z;y;x;
x;w;y;z; x;w;z;y; x;y;w;z;
x;y;z;w; x;z;w;y; x;z;y;w;
等等 。。。24種排列:
然后在帶如算術符號
如:+ + +;+ -+;+ * *;+ * /;+ + -;
等等窮舉的所有算術符號;(目前我找到的共有43種
可能不全);
下面是我編的源碼;
#include"stdio.h"
int kind(int a[4],int w,int x,int y,int z,int n)
{
switch(n)
{
case 1: a[0]=w;a[1]=x;a[2]=y;a[3]=z;
case 2: a[0]=w;a[1]=x;a[2]=z;a[3]=y;
case 3: a[0]=w;a[1]=y;a[2]=x;a[3]=z;
case 4: a[0]=w;a[1]=y;a[2]=z;a[3]=x;
case 5: a[0]=w;a[1]=z;a[2]=x;a[3]=y;
case 6: a[0]=w;a[1]=z;a[2]=y;a[3]=x;
case 7: a[0]=x;a[1]=w;a[2]=y;a[3]=z;
case 8: a[0]=x;a[1]=w;a[2]=z;a[3]=y;
case 9: a[0]=x;a[1]=y;a[2]=w;a[3]=z;
case 10:a[0]=x;a[1]=y;a[2]=z;a[3]=w;
case 11:a[0]=x;a[1]=z;a[2]=w;a[3]=y;
case 12:a[0]=x;a[1]=z;a[2]=y;a[3]=z;
,。。。。。。。。。
。。。。。。。。。。。
。。。。。。。。。。。
。。。。。。。。。。。
case 24: a[0]=z;a[1]=y;a[2]=w;a[3]=x;
}
因為沒辦法一下返回4個數字,所以就用數組來返回
被改變的4個數字;(如有更好的辦法請告之)
main()
{
int i,j,w,x,y,z,s,find=0; /w,x,y,z是4張牌s是牌的和
find 是找到標志*/
int a[4];
clrscr();
do{
printf("請輸入4張牌的面值[1-10]“);
scanf("%d %d %d %d",&w,&x,&y,&z);
}while(w>=11||x>=11||y>=11||z>=11);
for(j=1;j<=43;j++)/*窮舉符號的排列次數*/
{
switch(j)
{
case 1:
for(i=1;i<=24;i++)
{
kind(a,w,x,y,z,i)
s=a[0]+a[1]+a[2]+a[3];
if(s==24)
{
printf("%d+%d+%d+%d=24",a[0],a[1],a[2],a[3]);
find=1;break;
}
}break;
case 2:
for(i=1;i<=24;i++)
{
kind(a,w,x,y,z,i);
s=a[0]+a[1]+a[2]-a[3];
if(s==24)
{
printf("%d+%d+%d-%d=24",a[0],a[1],a[2],a[3]);
find=1;break;
}
}break;
case 3:
for(i=1;i<=24;i++)
{
kind(a,w,x,y,z,i);
s=a[0]+a[1]-a[2]+a[3];
if(s==24)
{
printf("%d+%d-%d+%d=24",a[0],a[1],a[2],a[3]);
find=1;break;
}
}break;
case 4:
for(i=1;i<=24;i++)
{
kind(a,w,x,y,z,i);
s=(a[0]+a[1]+a[2])*a[3];/*別忘了帶括號*/
if(s==24)
{
printf("(%d+%d+%d)*%d=24",a[0],a[1],a[2],a[3]);
find=1;break;
}
}break;
case 5:
.................
.................
................
..............
...............
case 43:
for(i=1;i<=24;i++)
{
kind(a,w,x,y,z,i);
s=a[0]/a[1]a*[2]*a[3];
if(s==24)
{
printf("%d/%d*%d*%d=24",a[0],a[1],a[2],a[3]);
find=1;break;
}
}break;
}
}break;
if(find==0)
printf("組不成24“);
getch();
}
這到題我是在做同濟大學題庫里的排列組合是想到的
有什么更簡單的方法就一起討論討論。。。。
[此貼子已經被作者于2004-10-19 00:13:12編輯過]
總結
以上是生活随笔為你收集整理的C语言给出任意4个数算24点,讨论24点算法。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android手机网页字体异常,移动端h
- 下一篇: 天地图 + geojson 绘制中国行政