65,144
社区成员




如题目,直接上代码:
#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 ,如有发现,可以告诉我哟。
//定义下面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
哎,我自己发现了一个bug,3 3 8 8不行,过程:8/(3-(8/3)),我是两个数两个数计算的,所以在算8/3时,c++算出的是2.66667,最后就得不出答案