华为oj24点游戏算法法 哪位大虾有

24点游戏算法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
24点游戏算法
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩14页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢24点游戏算法问题_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:497,911贴子:
24点游戏算法问题收藏
计算24点的游戏程序问题:任意输入1-9的4个数字,其中每个数字只能使用一次;任意使用 + - * / ( ) ,构造出一个表达式,使得最终结果为24,这就是常见的算24点的游戏。 界面:用户输入4个数字,程序输出所有可能结果(不含重复的表达式)。如: Input: 5 6 3 2 Output: 5*6-3*2 = 24 … …各位吧友有没有什么好的算法???想了半天要不就是不会表示分数,要不就是不会编写组合看了别人用回溯算法但是不知道怎么用,大神你们说说该怎么办
c语言一般需要4-8周,就可以掌握.4个月=两年的工作经验,月薪过万.c语言的费用根据培训课时定,免费试听编程课程,名师授课,手把手传教.
直接穷举也可以,我的百度文库就是自己写的一个穷举24点算法,考虑5种括号的情况则可,数组保存每次运算结果…
至于组合,纠正下,应该是排列…也简单,用4个FOR循环则可
把所有情况列出来,也就2千多种,那么4千多行代码就ok
不考虑使用分数能写出来不?怎么排除重复太痛苦了,写了半天满是重复的.
#include &stdio.h&#include &stdlib.h&#include &windows.h&int a1,a2,a3,a4;void f3(int i){m=i%4;switch(m){case 0:printf("+%d=24\n",a4);case 1:printf("-%d=24\n",a4);case 2:printf("*%d=24\n",a4);case 3:printf("/%d=24\n",a4);default:}}void f2(int i){int m,n;m=i/4;n=i%4;switch(m){case 0:printf("+%d",a3);f3(n);case 1:printf("-%d",a3);f3(n);case 2:printf("*%d",a3);f3(n);case 3:printf("/%d",a3);f3(n);default:}}void f1(int i){int m,n;m=i/16;n=i%16;switch(m){case 0:printf("%d+%d",a1,a2);f2(n);case 1:printf("%d-%d",a1,a2);f2(n);case 2:printf("%d*%d",a1,a2);f2(n);case 3:printf("%d/%d",a1,a2);f2(n);default:}}int main(void) {int i=0,j=0;printf("Lucky 24 is starting !\n");scanf("%d%d%d%d",&a1,&a2,&a3,&a4);int a[4]={0};int b[16]={0};int c[64]={0};a[0]=a1+a2;a[1]=a1-a2;a[2]=a1*a2;a[3]=a1/a2;j=0;for(i=0;i&4;i++){b[j]=a[i]+a3;b[j+1]=a[i]-a3;b[j+2]=a[i]*a3;b[j+3]=a[i]/a3;j=j+4;}j=0;for(i=0;i&16;i++){c[j]=b[i]+a4;c[j+1]=b[i]-a4;c[j+2]=b[i]*a4;c[j+3]=b[i]/a4;j=j+4;}j=0;for(i=0;i&64;i++){if(c[i]==24){f1(i);//printf("This can satisfy you !
%d\n",i);j++;}}printf("有%d个符合条件。\n",j);if(j==0){printf("This can't satisfy you !\n");}system("pause");return 0;}
I used a 7-layer for loop to solve it for the first time.
HELLO.C -- Hello, world */ #include "stdio.h"#include "conio.h"#include "stdlib.h"#include "time.h"#include "math.h"#include "ctype.h"int JS(int a,int b,int c) /*两数计算*/{if(c==0) return a+b; if(c==1) return a-b; if(c==2) return a*b; else if(b==0||a%b!=0) return
return a/b;
} char FH(int a)
/*打印符号*/{if(a==0) return '+'; else if(a==1) return '-';
else if(a==2) return '*';
return '/';} int main(){int a[4],b[4],c[4],d[4]; int sum1,sum2,sum3, printf("输入4个数\n");for(n=0;n&=3;n++) scanf("%d",&a[n]); for(c[0]=0;c[0]&=3;c[0]++)
{for(c[1]=0;c[1]&=3;c[1]++)
{if(c[1]==c[0])
for(c[2]=0;c[2]&=3;c[2]++)
{if(c[2]==c[1]||c[2]==c[0])
c[3]=6-c[2]-c[1]-c[0];
if(c[3]==c[2]||c[3]==c[1]||c[3]==c[0])
for(n=0;n&=3;n++)
b[n]=a[c[n]];
/*从上面到到本句为交换4个数的输入顺序*/
for(n=0;n&=255;n++)
/*在不考虑分数的情况,4种括号,3个计算符,所以总得有256可能*/
/*考虑分数的话8种括号都需要算吧,但那样重复的太多了,先写简单的吧*/
{d[0]=(n&3)/1;d[1]=(n&12)/4;d[2]=(n&48)/16;d[3]=(n&192)/64;
/*d[0]为括号 d[1],d[2],d[3] 分别为第1,2,3个计算符号*/
if(d[0]==0){if((d[2]&=1)&&(d[3]&=2))
/*只计算(a+b)*c*d这样第2符号优先级不低于第3符号式子*/
/*第3符号比第2个高的由其他式子计算*/
else {sum1=JS(b[0],b[1],d[1]);
sum2=JS(sum1,b[2],d[2]);
sum3=JS(sum2,b[3],d[3]);
if(sum3==24)
printf("(%d%c%d)%c%d%c%d=24\n",b[0],FH(d[1]),b[1],FH(d[2]),b[2],FH(d[3]),b[3]);
if(d[0]==1){if((d[1]&=1)&&(d[2]&=2)) ;
/*只计算(a+b+c)*d这样第1符号和第2符号优先级相同的算法*/
/*第2符号比第1符号优先的式子由其他式子计算*/
{sum1=JS(b[0],b[1],d[1]);
sum2=JS(sum1,b[2],d[2]);
sum3=JS(sum2,b[3],d[3]);
if(sum3==24.0)
printf("(%d%c%d%c%d)%c%d=24\n",b[0],FH(d[1]),b[1],FH(d[2]),b[2],FH(d[3]),b[3]);
if(d[0]==2){
/*没啥讲的,3步计算都固定死了,就是与其他式子重复的多了*/
sum1=JS(b[1],b[2],d[2]);
sum2=JS(b[0],sum1,d[1]);
sum3=JS(sum2,b[3],d[3]);
if(sum3==24)
printf("(%d%c(%d%c%d))%c%d=24\n",b[0],FH(d[1]),b[1],FH(d[2]),b[2],FH(d[3]),b[3]);
if(d[0]==3){if((d[2]&=2&&(d[1]&=2||d[3]&=2))||(d[2]&=1&&(d[1]&=1||d[3]&=1)));
/*也是3步都固定死的,第1或者第3的优先级与第2的相同的话可以转换成第1或者第2个式子或者无解,所以不计算*/
else {sum1=JS(b[0],b[1],d[1]);
sum2=JS(b[2],b[3],d[3]);
sum3=JS(sum1,sum2,d[2]);
if(sum3==24)
printf("(%d%c%d)%c(%d%c%d)=24\n",b[0],FH(d[1]),b[1],FH(d[2]),b[2],FH(d[3]),b[3]);
} getch();return 0;}
学习c语言华丽逆袭在蓝鸥,签高额技术服务协议 ,薪资技术没的说,就业薪水比别人多出2k.学习c语言首选蓝鸥,采用市场上新技术教学,得到3万多名学生的认可!
直接复制代码后排版有点乱,长的语句成2截了.看这图,改改吧.
还好我是小学生,不用参加各位学神的讨论。
大学不是学计算机的,哈哈哈哈哈哈哈哈哈哈哈看不懂,,,,
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或【24点棋牌游戏-第八期】
一副扑克牌现在给出4张牌【黑桃3,红桃4,梅花5,方块10】,请问如何用这四张牌运用“加减乘除”法则得到24点?这一期略微提升了些难度,先做题再看答案哦!
【自己做好以后在往下看!答案在下面】
3*(4/5)*10=24
(答案不唯一,欢迎各位大虾在平台传授其他秘诀)
本文来自微信公众账号提交,由微讯啦收录,转载请注明出处。
微信扫码 分享文章

我要回帖

更多关于 华为oj24点游戏算法 的文章

 

随机推荐