| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4520 人关注过本帖
标题:c语言24点游戏算法
只看楼主 加入收藏
yqchilde
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-12-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
c语言24点游戏算法
c语言24点游戏算法,可以编译但是不知道错在哪里 麻烦有能力者帮忙看看,谢谢
程序代码:
#include<stdlib.h> 
#include<stdio.h>
#include<time.h> 
void main() 
{ 
int i,j,k; 
int a1,a2,a3,a4; 
int x1,x2,x3,x4,x; 
do 
{ srand(time(0));
for(i=0;i<1;i++) 
{ 
j=rand()%10000; 
} 

a4=j/1000;a3=(j-a4*1000)/100; 
a2=(j-a4*1000-a3*100)/10;a1=j-a4*1000-a3*100-a2*10; 
} 
while(a1==a2||a1==a3||a1==a4||a2==a3||a2==a4||a3==a4); 
printf("Please input a number:"); 
do 
{ 
scanf("%d",&x); 

x4=x/1000;x3=(x-x4*1000)/100; 
x2=(x-x4*1000-x3*100)/10;x1=x-x4*1000-x3*100-x2*10; 

if(x1==a1) 
{ 
printf("a"); 
goto q1; 
} 
if(x1!=a1) 
{ 
if(x1==a2) 
{ 
printf("b"); 
goto q1; 
} 
if(x1!=a2) 
{ 
if(x1==a3) 
{ 
printf("b"); 
goto q1; 
} 
if(x1!=a3) 
{ 
if(x1==a4) 
{ 
printf("b"); 
goto q1; 
} 
if(x1!=a4) 
{ 
goto q1; 
} 
} 
} 
} 
q1: 
if(x2==a1) 
{ 
printf("b"); 
goto q2; 
} 
if(x2!=a1) 
{ 
if(x2==a2) 
{ 
printf("a"); 
goto q2; 
} 
if(x2!=a2) 
{ 
if(x2==a3) 
{ 
printf("b"); 
goto q2; 
} 
if(x2!=a3) 
{ 
if(x2==a4) 
{ 
printf("b"); 
goto q2; 
} 
if(x2!=a4) 
{ 
goto q2; 
} 
} 
} 
} 
q2: 
if(x3==a1) 
{ 
printf("b"); 
goto q3; 
} 
if(x3!=a1) 
{ 
if(x3==a2) 
{ 
printf("b"); 
goto q3; 
} 
if(x3!=a2) 
{ 
if(x3==a3) 
{ 
printf("a"); 
goto q3; 
} 
if(x3!=a3) 
{ 
if(x3==a4) 
{ 
printf("b"); 
goto q3; 
} 
if(x3!=a4) 
{ 
} 
} 
} 
} 
q3: 
if(x4==a1) 
{ 
printf("b"); 
goto q4; 
} 
if(x4!=a1) 
{ 
if(x4==a2) 
{ 
printf("b"); 
goto q4;
} 
{ 
if(x4==a3) 
{ 
printf("b"); 
goto q4; 
} 
if(x4!=a3) 
{ 
if(x4==a4) 
{ 
printf("a"); 
goto q4; 
} 
if(x4!=a4) 
{ 
goto q4; 
} 
} 
} 
} 
q4: 
printf("\n"); 
} 
while(a1!=x1||a2!=x2||a3!=x3||a4!=x4); 
printf("You are right!\nThanks for your support.\nThe game is made by 胡潇月~"); 
getchar(); 
} 


[此贴子已经被作者于2017-12-12 17:59编辑过]

搜索更多相关主题的帖子: c语言 游戏 || printf goto 
2017-12-12 17:58
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
提问起码要有个态度吧~先要把代码缩进一下,然后再说明具体操作是怎么样的,用户输入输出说明(输入输出案例)这种还是要说说的……看到goto还是不多说些什么了~

记得以前思考过,不过自己知识有限弄不出来~
不过现在思考了一下用后缀表达式比较好,实质四个数的后缀表达式共有五种情况~
1 2 3 4 + + *
1 2 3 + 4 + *
1 2 + 3 4 + *
1 2 3 + + 4 *
1 2 + 3 + 4 *

如果不考虑对称情况的话,四个数全排列有24种,符号加减乘除共有四的三次方为64种,加上5个类,所以所有遍历情况为24*64*5=7680种~


[此贴子已经被作者于2017-12-12 20:24编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-12 19:42
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:10 
#include <iostream>  
using namespace std;  
int main()  
{ float a,b,c,d;  
m_ret: //做标记  
cout<<"请输入4个数据"<<endl;  
cout<<" 第一个数:";  
cin>>a;  
cout<<" 第二个数:";  
cin>>b;  
cout<<" 第三个数:";  
cin>>c;  
cout<<" 第四个数:";  
cin>>d;  
cout<<"输出所有算法如下:"<<endl;  
if ((a<0)||(a>10)||(b<0)||(b>10)||(c<0)||(c>10)||(d<0)||(d>10))  
{ cout<<"你输入的输入不对,重新输入"<<endl;  
goto m_ret; } // 返回标记,重复输入  
int Calculate ( float x, float y, float z, float w); // a .b.c.d 的所有排列组合情况  
Calculate(a,b,c,d); Calculate(a,b,d,c); Calculate(a,c,d,b);  
Calculate(a,c,b,d); Calculate(a,d,b,c); Calculate(a,d,c,b);  
Calculate(b,a,c,d); Calculate(b,a,d,c); Calculate(b,c,a,d);  
Calculate(b,c,d,a); Calculate(b,d,c,a); Calculate(b,d,a,c);  
Calculate(c,a,b,d); Calculate(c,a,d,b); Calculate(c,b,d,a);  
Calculate(c,b,a,d); Calculate(c,d,a,b); Calculate(c,d,b,a);  
Calculate(d,a,b,c); Calculate(d,a,c,b); Calculate(d,b,c,a);  
Calculate(d,b,a,c); Calculate(d,c,a,b); Calculate(d,c,b,a);  
return 0; }  
int Calculate ( float x, float y, float z, float w) //运算表达式的所有情况  
{   
    if (x+y+z+w==24) cout<<x<<"+"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;  
    else if (x+y+z-w==24) cout<<x<<"+"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl;  
    else if ((x+y)*(z+w)==24) cout<<"("<<x<<"+"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;  
    else if ((x-y)*(z+w)==24) cout<<"("<<x<<"-"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;  
    else if ((x-y)*(z-w)==24) cout<<"("<<x<<"-"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;  
    else if ((x+y+z)*w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl;  
    else if ((x-y-z)*w==24) cout<<"("<<x<<"-"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;  
    else if ((x+y-z)*w==24) cout<<"("<<x<<"+"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;  
    else if ((x*y*z)/w==24) cout<<"("<<x<<"*"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl;  
    else if ((x*y)*(z+w)==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;  
    else if ((x*y)*(z-w)==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;  
    else if ((x*y)*z-w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")-"<<w<<"=24"<<endl;  
    else if ((x*y)*z+w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")+"<<w<<"=24"<<endl;  
    else if (x*y*z*w==24) cout<<x<<"*"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl;  
    else if ((x+y)+(z/w)==24) cout<<"("<<x<<"+"<<y<<")+("<<z<<"/"<<w<<")"<<"=24"<<endl;  
    else if ((x+y)*(z/w)==24) cout<<"("<<x<<"+"<<y<<")*("<<z<<"/"<<w<<")"<<"=24"<<endl;  
    else if ((x*y)+z+w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"+"<<w<<"=24"<<endl;  
    else if ((x*y)+z-w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"-"<<w<<"=24"<<endl;  
    else if ((x*y)-(z/w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;  
    else if ((x*y)+(z/w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;  
    else if ((x*y)-z-w==24) cout<<"("<<x<<"*"<<y<<")-"<<z<<"-"<<w<<"=24"<<endl;  
    else if ((x*y)+(z*w)==24) cout<<"("<<x<<"*"<<y<<")+("<<z<<"*"<<w<<")"<<"=24"<<endl;  
    else if ((x*y)-(z*w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"*"<<w<<")"<<"=24"<<endl;  
    else if ((x*y)/(z*w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"*"<<w<<")"<<"=24"<<endl;  
    else if ((x*y)/(z-w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"-"<<w<<")"<<"=24"<<endl;  
    else if ((x*y)/(z+w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"+"<<w<<")"<<"=24"<<endl;  
    else cout<<"不可以组成24"<<endl;  
return 0;   
}  
2017-12-12 23:38
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 自学的数学
这样枚举简单感觉必要的时候还是可以的~不过嘛用else if似乎会漏掉情况,12*2*1*1=24;12*2+1-1=24,而且最后还打印个"不可以组成24",也只是对24种情况里面的其中一种而已,当然这些都是小问题,方向上还是可以的~



[此贴子已经被作者于2017-12-12 23:49编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-12 23:45
yqchilde
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-12-12
收藏
得分:0 
回复 3楼 自学的数学
源码有错误啊 不能正常调试
2017-12-25 12:23
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
可以正常运行的。
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-12-25 15:46
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
凡用goto,以及if嵌套过多的都是脑残代码

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2017-12-25 18:30
快速回复:c语言24点游戏算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042383 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved