算24点的小工具(2.7版本)

ljb_c++888 2024-05-04 15:14:44

如题目,直接上代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	bool keepRunning=true;  
	while(keepRunning){ 
		cout<<"请输入4个数"<<endl; 
		int a,b,c,d,s=0;
		cin>>a>>b>>c>>d;
		for(int m=1;m<=5;m++){
			for(int l=0;l<24;l++){
				int ssa=a,ssb=b,ssc=c,ssd=d;
				if(l==1){
					swap(ssc,ssd);
				}
				if(l==2){
					swap(ssb,ssc);
				}
				if(l==3){
					swap(ssb,ssc);
					swap(ssb,ssd);
				}
				if(l==4){
					swap(ssb,ssd);
					swap(ssc,ssb);
				}
				if(l==5){
					swap(ssb,ssd);
				}
				if(l==6){
					swap(ssa,ssb);
				}
				if(l==7){
					swap(ssa,ssb);
					swap(ssc,ssd);
				}
				if(l==8){
					swap(ssa,ssb);
					swap(ssa,ssc);
				}
				if(l==9){
					swap(ssa,ssb);
					swap(ssa,ssc);
					swap(ssa,ssd);
				}
				if(l==10){
					swap(ssa,ssb);
					swap(ssa,ssc);
					swap(ssc,ssd);
				}
				if(l==11){
					swap(ssa,ssb);
					swap(ssa,ssc);
					swap(ssc,ssd);
					swap(ssa,ssc);
				}
				if(l==12){
					swap(ssa,ssc);
					swap(ssb,ssa);
				}
				if(l==13){
					swap(ssa,ssc);
					swap(ssb,ssa);
					swap(ssb,ssd);
				}
				if(l==14){
					swap(ssa,ssc);
				}
				if(l==15){
					swap(ssa,ssc);
					swap(ssa,ssd);
				}
				if(l==16){
					swap(ssa,ssc);
					swap(ssa,ssd);
					swap(ssb,ssd);
					swap(ssb,ssa);
				}
				if(l==17){
					swap(ssa,ssc);
					swap(ssa,ssd);
					swap(ssb,ssd);
				}
				if(l==18){
					swap(ssd,ssa);
					swap(ssb,ssa);
					swap(ssc,ssb);
				}
				if(l==19){
					swap(ssd,ssa);
					swap(ssb,ssa);
				}
				if(l==20){
					swap(ssd,ssa);
					swap(ssc,ssa);
				}
				if(l==21){
					swap(ssd,ssa);
				}
				if(l==22){
					swap(ssa,ssd);
					swap(ssc,ssb);
					swap(ssb,ssa);
				}
				if(l==23){
					swap(ssa,ssd);
					swap(ssb,ssc);
				}
				for(int i=1;i<=4;i++){
					for(int j=1;j<=4;j++){
						for(int k=1;k<=4;k++){
							float sa=ssa,sb=ssb,sc=ssc,sd=ssd;
							char si,sj,sk;
							if(m==1){
								if(i==1){
									sb=sb+sa;
									si='+';
								}
								if(i==2){	
									sb=sa-sb;
									si='-';
								}
								if(i==3){
									sb=sb*sa;
									si='x';
								}
								if(i==4){
									sb=sa/sb;
									si='/';
								}
								if(j==1){
									sc=sb+sc;
									sj='+';
								}
								if(j==2){
									sc=sb-sc;
									sj='-';
								}
								if(j==3){
									sc=sb*sc;
									sj='x';
								}
								if(j==4){
									sc=sb/sc;
									sj='/';
								}
								if(k==1){
									sd=sd+sc;
									sk='+';
									if(sd==24){
										s++;
										cout<<"(("<<ssa<<si<<ssb<<")"<<sj<<ssc<<")"<<sk<<ssd<<endl;
									}
								}
								if(k==2){
									sd=sc-sd;
									sk='-';
									if(sd==24){
										s++;
										cout<<"(("<<ssa<<si<<ssb<<")"<<sj<<ssc<<")"<<sk<<ssd<<endl;
									}
								}
								if(k==3){
									sd=sd*sc;
									sk='x';
									if(sd==24){
										s++;
										cout<<"(("<<ssa<<si<<ssb<<")"<<sj<<ssc<<")"<<sk<<ssd<<endl;
									}
								}
								if(k==4){
									sd=sc/sd;
									sk='/';
									if(sd==24){
										s++;
										cout<<"(("<<ssa<<si<<ssb<<")"<<sj<<ssc<<")"<<sk<<ssd<<endl;
									}
								}
							}
							if(m==2){
								if(i==1){
									sb=sb+sc;
									si='+';
								}
								if(i==2){	
									sb=sb-sc;
									si='-';
								}
								if(i==3){
									sb=sb*sc;
									si='x';
								}
								if(i==4){
									sb=sb/sc;
									si='/';
								}
								if(j==1){
									sa=sa+sb;
									sj='+';
								}
								if(j==2){
									sa=sa-sb;
									sj='-';
								}
								if(j==3){
									sa=sa*sb;
									sj='x';
								}
								if(j==4){
									sa=sa/sb;
									sj='/';
								}
								if(k==1){
									sd=sa+sd;
									sk='+';
									if(sd==24){
										s++;
										cout<<"("<<ssa<<sj<<"("<<ssb<<si<<ssc<<"))"<<sk<<ssd<<endl;
									}
								}
								if(k==2){
									sd=sa-sd;
									sk='-';
									if(sd==24){
										s++;
										cout<<"("<<ssa<<sj<<"("<<ssb<<si<<ssc<<"))"<<sk<<ssd<<endl;
									}
								}
								if(k==3){
									sd=sa*sd;
									sk='x';
									if(sd==24){
										s++;
										cout<<"("<<ssa<<sj<<"("<<ssb<<si<<ssc<<"))"<<sk<<ssd<<endl;
									}
								}
								if(k==4){
									sd=sa/sd;
									sk='/';
									if(sd==24){
										s++;
										cout<<"("<<ssa<<sj<<"("<<ssb<<si<<ssc<<"))"<<sk<<ssd<<endl;
									}
								}
							}
							if(m==3){
								if(i==1){
									sb=sb+sa;
									si='+';
								}
								if(i==2){	
									sb=sa-sb;
									si='-';
								}
								if(i==3){
									sb=sb*sa;
									si='x';
								}
								if(i==4){
									sb=sa/sb;
									si='/';
								}
								if(j==1){
									sd=sc+sd;
									sj='+';
								}
								if(j==2){
									sd=sc-sd;
									sj='-';
								}
								if(j==3){
									sd=sc*sd;
									sj='x';
								}
								if(j==4){
									sd=sc/sd;
									sj='/';
								}
								if(k==1){
									sd=sd+sb;
									sk='+';
									if(sd==24){
										s++;
										cout<<"("<<ssa<<si<<ssb<<")"<<sk<<"("<<ssc<<sj<<ssd<<")"<<endl;
									}
								}
								if(k==2){
									sd=sb-sd;
									sk='-';
									if(sd==24){
										s++;
										cout<<"("<<ssa<<si<<ssb<<")"<<sk<<"("<<ssc<<sj<<ssd<<")"<<endl;
									}
								}
								if(k==3){
									sd=sd*sb;
									sk='x';
									if(sd==24){
										s++;
										cout<<"("<<ssa<<si<<ssb<<")"<<sk<<"("<<ssc<<sj<<ssd<<")"<<endl;
									}
								}
								if(k==4){
									sd=sb/sd;
									sk='/';
									if(sd==24){
										s++;
										cout<<"("<<ssa<<si<<ssb<<")"<<sk<<"("<<ssc<<sj<<ssd<<")"<<endl;
									}
								}
							}
							if(m==4){
								if(i==1){
									sb=sb+sc;
									si='+';
								}
								if(i==2){	
									sb=sb-sc;
									si='-';
								}
								if(i==3){
									sb=sb*sc;
									si='x';
								}
								if(i==4){
									sb=sb/sc;
									si='/';
								}
								if(j==1){
									sd=sb+sd;
									sj='+';
								}
								if(j==2){
									sd=sb-sd;
									sj='-';
								}
								if(j==3){
									sd=sb*sd;
									sj='x';
								}
								if(j==4){
									sd=sb/sd;
									sj='/';
								}
								if(k==1){
									sa=sa+sd;
									sk='+';
									if(sa==24){
										s++;
										cout<<ssa<<sk<<"(("<<ssb<<si<<ssc<<")"<<sj<<ssd<<")"<<endl;
									}
								}
								if(k==2){
									sa=sa-sd;
									sk='-';
									if(sa==24){
										s++;
										cout<<ssa<<sk<<"(("<<ssb<<si<<ssc<<")"<<sj<<ssd<<")"<<endl;
									}
								}
								if(k==3){
									sa=sa*sd;
									sk='x';
									if(sa==24){
										s++;
										cout<<ssa<<sk<<"(("<<ssb<<si<<ssc<<")"<<sj<<ssd<<")"<<endl;
									}
								}
								if(k==4){
									sa=sa/sd;
									sk='/';
									if(sa==24){
										s++;
										cout<<ssa<<sk<<"(("<<ssb<<si<<ssc<<")"<<sj<<ssd<<")"<<endl;
									}
								}
							}
							if(m==5){
								if(i==1){
									sc=sc+sd;
									si='+';
								}
								if(i==2){	
									sc=sc-sd;
									si='-';
								}
								if(i==3){
									sc=sc*sd;
									si='x';
								}
								if(i==4){
									sc=sc/sd;
									si='/';
								}
								if(j==1){
									sb=sb+sc;
									sj='+';
								}
								if(j==2){
									sb=sb-sc;
									sj='-';
								}
								if(j==3){
									sb=sb*sc;
									sj='x';
								}
								if(j==4){
									sb=sb/sc;
									sj='/';
								}
								if(k==1){
									sd=sa+sb;
									sk='+';
									if(sd==24){
										s++;
										cout<<ssa<<sk<<"("<<ssb<<sj<<"("<<ssc<<si<<ssd<<"))"<<endl;
									}
								}
								if(k==2){
									sd=sa-sb;
									sk='-';
									if(sd==24){
										s++;
										cout<<ssa<<sk<<"("<<ssb<<sj<<"("<<ssc<<si<<ssd<<"))"<<endl;
									}
								}
								if(k==3){
									sd=sa*sb;
									sk='x';
									if(sd==24){
										s++;
										cout<<ssa<<sk<<"("<<ssb<<sj<<"("<<ssc<<si<<ssd<<"))"<<endl;
									}
								}
								if(k==4){
									sd=sa/sb;
									sk='/';
									if(sd==24){
										s++;
										cout<<ssa<<sk<<"("<<ssb<<sj<<"("<<ssc<<si<<ssd<<"))"<<endl;
									}
								}
							}
						}	
					}
				}
			}
		}
		cout<<"一共"<<s<<"种结果"<<endl<<"谢谢使用"<<endl<<endl<<endl; 
		cout << "是否继续输入新的数字?(y/n)";  
	    char choice;  
	    cin >> choice;  
	    if (choice != 'y' && choice != 'Y') {  
	        keepRunning = false;  
	    }  
	}  
	return 0;
}

额……由于小编为了大家能看懂,所以用了大家都能看懂的代码(好吧,其实是小编能力有限,我才六年级!)

我用的方法是3个循环嵌套来实现24点的计算,因为有4个数,所以应该有3个计算符号

前面用swap交换是用来实现加括号的

其他的你们应该都能看懂

下面我们来看效果:

输入:

输出:

小编这里没有把所有答案都放出来,大家可以自己去试试

小编认为已经没有任何bug ,如有发现,可以告诉我哟。

 

 

 

...全文
178 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 05-10
  • 打赏
  • 举报
回复

//定义下面5种运算顺序:
// ((A @   B) @  C)  @ D  =
//  (A @   B) @ (C   @ D) =
//  (A @  (B  @  C)) @ D  =
//   A @ ((B  @  C)  @ D) =
//   A @  (B  @ (C   @ D))=
//23.99<计算结果<24.01
//其中:
//1≤A、B、C、D≤13
//@为“+、-、*、/”之一
//用浮点数计算,循环遍历以上所有情况即可。
#include <stdio.h>
#define when break;case
int A,B,C,D,N;
float r,r1,r2;
char op1,op2,op3;
char opc[4]={'+','-','*','/'};
void main() {
    N=0;
    for (A  =1;A  <=13;A  ++) {
    for (B  =1;B  <=13;B  ++) {
    for (C  =1;C  <=13;C  ++) {
    for (D  =1;D  <=13;D  ++) {
    for (op1=0;op1<  4;op1++) {
    for (op2=0;op2<  4;op2++) {
    for (op3=0;op3<  4;op3++) {
        // ((A @   B) @  C)  @ D
        r=(float)A;
        switch (op1) {case 0:r =r +B ;when 1:r =r -B ;when 2:r =r *B ;when 3:                                      r =r /B ;break;}
        switch (op2) {case 0:r =r +C ;when 1:r =r -C ;when 2:r =r *C ;when 3:                                      r =r /C ;break;}
        switch (op3) {case 0:r =r +D ;when 1:r =r -D ;when 2:r =r *D ;when 3:                                      r =r /D ;break;}
        if (23.99f<r && r<24.01f) {N++;printf("%5d: ((%2d %c   %2d) %c  %2d)  %c %2d  =24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}

        //  (A @   B) @ (C   @ D)
        r1=(float)A;
        switch (op1) {case 0:r1=r1+B ;when 1:r1=r1-B ;when 2:r1=r1*B ;when 3:                                      r1=r1/B ;break;}
        r2=(float)C;
        switch (op3) {case 0:r2=r2+D ;when 1:r2=r2-D ;when 2:r2=r2*D ;when 3:                                      r2=r2/D ;break;}
        switch (op2) {case 0:r =r1+r2;when 1:r =r1-r2;when 2:r =r1*r2;when 3:if (-0.01f<r2 && r2<0.01f) goto STEP3;r =r1/r2;break;}
        if (23.99f<r && r<24.01f) {N++;printf("%5d:  (%2d %c   %2d) %c (%2d   %c %2d) =24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}

        //  (A @  (B  @  C)) @ D
    STEP3:
        r=(float)B;
        switch (op2) {case 0:r =r +C ;when 1:r =r -C ;when 2:r =r *C ;when 3:                                      r =r /C ;break;}
        switch (op1) {case 0:r =A +r ;when 1:r =A -r ;when 2:r =A *r ;when 3:if (-0.01f<r  && r <0.01f) goto STEP4;r =A /r ;break;}
        switch (op3) {case 0:r =r +D ;when 1:r =r -D ;when 2:r =r *D ;when 3:                                      r =r /D ;break;}
        if (23.99f<r && r<24.01f) {N++;printf("%5d:  (%2d %c  (%2d  %c  %2d)) %c %2d  =24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}

        //   A @ ((B  @  C)  @ D)
    STEP4:
        r=(float)B;
        switch (op2) {case 0:r =r +C ;when 1:r =r -C ;when 2:r =r *C ;when 3:                                      r =r /C ;break;}
        switch (op3) {case 0:r =r +D ;when 1:r =r -D ;when 2:r =r *D ;when 3:                                      r =r /D ;break;}
        switch (op1) {case 0:r =A +r ;when 1:r =A -r ;when 2:r =A *r ;when 3:if (-0.01f<r  && r <0.01f) goto STEP5;r =A /r ;break;}
        if (23.99f<r && r<24.01f) {N++;printf("%5d:   %2d %c ((%2d  %c  %2d)  %c %2d) =24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}

        //   A @  (B  @ (C   @ D))
    STEP5:
        r=(float)C;
        switch (op3) {case 0:r =r +D ;when 1:r =r -D ;when 2:r =r *D ;when 3:                                      r =r /D ;break;}
        switch (op2) {case 0:r =B +r ;when 1:r =B -r ;when 2:r =B *r ;when 3:if (-0.01f<r  && r <0.01f) continue  ;r =B /r ;break;}
        switch (op1) {case 0:r =A +r ;when 1:r =A -r ;when 2:r =A *r ;when 3:if (-0.01f<r  && r <0.01f) continue  ;r =A /r ;break;}
        if (23.99f<r && r<24.01f) {N++;printf("%5d:   %2d %c  (%2d  %c (%2d   %c %2d))=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}
    }//op3
    }//op2
    }//op1
    }//D
    }//C
    }//B
    }//A
}
//运行结果:
//    1: (( 1 +    1) +   1)  *  8  =24
//    2:  ( 1 +  ( 1  +   1)) *  8  =24
//    3:  ( 1 +    1) * ( 1   + 11) =24
// ... ...
//53280:  (13 +   13) / (13   / 12) =24
//53281:  (13 -  (13  /  13)) + 12  =24
//53282:   13 - ((13  /  13)  - 12) =24

ljb_c++888 05-19
  • 举报
回复
@赵4老师 你的这个程序里也没有3 3 8 8
赵4老师 05-20
  • 举报
回复
@ljb_c++888 有的:28711: 8 / ( 3 - ( 8 / 3))=24
ljb_c++888 05-04
  • 打赏
  • 举报
回复

哎,我自己发现了一个bug,3 3 8 8不行,过程:8/(3-(8/3)),我是两个数两个数计算的,所以在算8/3时,c++算出的是2.66667,最后就得不出答案

ljb_c++888 05-05
  • 举报
回复
@ljb_c++888 我在努力修改

64,830

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧