没事干写了。一个算24点的小程序
1 //最终版 2 #include <iostream> 3 #include <cmath> 4 using namespace std; 5 double ans2(char* c) 6 { 7 double a,b; 8 double sum; 9 char t; 10 a=c[2]-48;b=c[4]-48; 11 t=c[3]; 12 // cout<<"a: "<<a<<"b: "<<b<<"t: "<<t<<endl; 13 if(t=='+') 14 {sum=a+b;} 15 if(t=='-') 16 {sum=a-b;} 17 if(t=='*') 18 {sum=a*b;} 19 if(t=='/') 20 {sum=a/b;} 21 //cout<<sum<<endl; 22 a=sum;b=c[7]-48; 23 t=c[6]; 24 // cout<<"a: "<<a<<"b: "<<b<<"t: "<<t<<endl; 25 if(t=='+') 26 {sum=a+b;} 27 if(t=='-') 28 {sum=a-b;} 29 if(t=='*') 30 {sum=a*b;} 31 if(t=='/') 32 {sum=a/b;} 33 a=sum;b=c[10]-48; 34 t=c[9]; 35 // cout<<"a: "<<a<<"b: "<<b<<"t: "<<t<<endl; 36 if(t=='+') 37 {sum=a+b;} 38 if(t=='-') 39 {sum=a-b;} 40 if(t=='*') 41 {sum=a*b;} 42 if(t=='/') 43 {sum=a/b;} 44 return sum; 45 } 46 double ans3(char* c) 47 { 48 char t; 49 double a,b; 50 double sum1=0,sum2=0,sum=0; 51 a=c[1]-48; b=c[3]-48; t=c[2]; 52 if(t=='+') 53 {sum1=a+b;} 54 if(t=='-') 55 {sum1=a-b;} 56 if(t=='*') 57 {sum1=a*b;} 58 if(t=='/') 59 {sum1=a/b;} 60 a=c[7]-48; b=c[9]-48; t=c[8]; 61 if(t=='+') 62 {sum2=a+b;} 63 if(t=='-') 64 {sum2=a-b;} 65 if(t=='*') 66 {sum2=a*b;} 67 if(t=='/') 68 {sum2=a/b;} 69 a=sum1; b=sum2; t=c[5]; 70 if(t=='+') 71 {sum=a+b;} 72 if(t=='-') 73 {sum=a-b;} 74 if(t=='*') 75 {sum=a*b;} 76 if(t=='/') 77 {sum=a/b;} 78 return sum; 79 } 80 double ans4(char* c) 81 { 82 char t; 83 double a,b; 84 double sum1=0,sum2=0,sum=0; 85 a=c[4]-48; b=c[6]-48; t=c[5]; 86 if(t=='+') 87 {sum1=a+b;} 88 if(t=='-') 89 {sum1=a-b;} 90 if(t=='*') 91 {sum1=a*b;} 92 if(t=='/') 93 {sum1=a/b;} 94 a=c[1]-48; b=sum1; t=c[2]; 95 if(t=='+') 96 {sum2=a+b;} 97 if(t=='-') 98 {sum2=a-b;} 99 if(t=='*') 100 {sum2=a*b;} 101 if(t=='/') 102 {sum2=a/b;} 103 a=sum2; b=c[10]-48; t=c[9]; 104 if(t=='+') 105 {sum=a+b;} 106 if(t=='-') 107 {sum=a-b;} 108 if(t=='*') 109 {sum=a*b;} 110 if(t=='/') 111 {sum=a/b;} 112 return sum; 113 } 114 double ans5(char* c) 115 { 116 char t; 117 double a,b; 118 double sum1=0,sum2=0,sum=0; 119 a=c[4]-48; b=c[6]-48; t=c[5]; 120 if(t=='+') 121 {sum1=a+b;} 122 if(t=='-') 123 {sum1=a-b;} 124 if(t=='*') 125 {sum1=a*b;} 126 if(t=='/') 127 {sum1=a/b;} 128 a=sum1; b=c[9]-48; t=c[8]; 129 if(t=='+') 130 {sum2=a+b;} 131 if(t=='-') 132 {sum2=a-b;} 133 if(t=='*') 134 {sum2=a*b;} 135 if(t=='/') 136 {sum2=a/b;} 137 a=c[0]-48; b=sum2; t=c[1]; 138 if(t=='+') 139 {sum=a+b;} 140 if(t=='-') 141 {sum=a-b;} 142 if(t=='*') 143 {sum=a*b;} 144 if(t=='/') 145 {sum=a/b;} 146 return sum; 147 } 148 double ans6(char* c) 149 { 150 char t; 151 double a,b; 152 double sum1=0,sum2=0,sum=0; 153 a=c[6]-48; b=c[8]-48; t=c[7]; 154 if(t=='+') 155 {sum1=a+b;} 156 if(t=='-') 157 {sum1=a-b;} 158 if(t=='*') 159 {sum1=a*b;} 160 if(t=='/') 161 {sum1=a/b;} 162 a=c[3]-48; b=sum1; t=c[4]; 163 if(t=='+') 164 {sum2=a+b;} 165 if(t=='-') 166 {sum2=a-b;} 167 if(t=='*') 168 {sum2=a*b;} 169 if(t=='/') 170 {sum2=a/b;} 171 a=c[0]-48; b=sum2; t=c[1]; 172 if(t=='+') 173 {sum=a+b;} 174 if(t=='-') 175 {sum=a-b;} 176 if(t=='*') 177 {sum=a*b;} 178 if(t=='/') 179 {sum=a/b;} 180 return sum; 181 } 182 void fkind(char* a,int n,int i,char* t,char *p) 183 { 184 static int tot=0; 185 if(i==n) 186 { 187 for(int j=0;j<n;j++) 188 { 189 // cout<<t[j]<<" "; 190 p[tot++]=t[j]; 191 } 192 // cout<<endl; 193 // cout<<endl<<tot++<<endl; 194 } 195 else if(i<n) 196 { 197 for(int j=0;j<4;j++) 198 { 199 t[i]=a[j]; 200 fkind(a,n,i+1,t,p); 201 } 202 } 203 } 204 void nkind(int* a,int n,int i,int* t,int *p) 205 { 206 static int tot=0; 207 if(i==n) 208 { 209 for(int j=0;j<n;j++) 210 { 211 // cout<<t[j]<<" "; 212 p[tot++]=t[j]; 213 } 214 // cout<<endl; 215 // cout<<endl<<tot++<<endl; 216 } 217 else if(i<n) 218 { 219 for(int j=0;j<4;j++) 220 { 221 if(a[j]!=-1) 222 { 223 t[i]=a[j]; 224 int s=a[j]; 225 a[j]=-1; 226 nkind(a,n,i+1,t,p); 227 a[j]=s; 228 } 229 } 230 } 231 } 232 void equation(int* a,char* b,char* c) 233 { 234 c[0]=c[1]='('; 235 c[5]=c[8]=')'; 236 c[2]=a[0]+48; 237 c[4]=a[1]+48; 238 c[7]=a[2]+48; 239 c[10]=a[3]+48; 240 c[3]=b[0]; 241 c[6]=b[1]; 242 c[9]=b[2]; 243 c[11]='\0'; 244 } 245 void equation3(int* a,char* b,char* c) 246 { 247 c[0]=c[6]='('; 248 c[4]=c[10]=')'; 249 c[1]=a[0]+48; 250 c[3]=a[1]+48; 251 c[7]=a[2]+48; 252 c[9]=a[3]+48; 253 c[2]=b[0]; 254 c[5]=b[1]; 255 c[8]=b[2]; 256 c[11]='\0'; 257 } 258 void equation4(int* a,char* b,char* c) 259 { 260 c[0]=c[3]='('; 261 c[8]=c[7]=')'; 262 c[1]=a[0]+48; 263 c[4]=a[1]+48; 264 c[6]=a[2]+48; 265 c[10]=a[3]+48; 266 c[2]=b[0]; 267 c[5]=b[1]; 268 c[9]=b[2]; 269 c[11]='\0'; 270 } 271 void equation5(int* a,char* b,char* c) 272 { 273 c[2]=c[3]='('; 274 c[10]=c[7]=')'; 275 c[0]=a[0]+48; 276 c[4]=a[1]+48; 277 c[6]=a[2]+48; 278 c[9]=a[3]+48; 279 c[1]=b[0]; 280 c[5]=b[1]; 281 c[8]=b[2]; 282 c[11]='\0'; 283 } 284 void equation6(int* a,char* b,char* c) 285 { 286 c[2]=c[5]='('; 287 c[10]=c[9]=')'; 288 c[0]=a[0]+48; 289 c[3]=a[1]+48; 290 c[6]=a[2]+48; 291 c[8]=a[3]+48; 292 c[1]=b[0]; 293 c[4]=b[1]; 294 c[7]=b[2]; 295 c[11]='\0'; 296 } 297 void actoa2(int* a,char (*p)[5],int *sig) 298 { 299 int i=0; 300 for(i=0;i<4;i++) 301 { 302 if(sig[i]==1) 303 { 304 if(*(p+i)[0]=='1') a[i]=1; 305 if(*(p+i)[0]=='2') a[i]=2; 306 if(*(p+i)[0]=='3') a[i]=3; 307 if(*(p+i)[0]=='4') a[i]=4; 308 if(*(p+i)[0]=='5') a[i]=5; 309 if(*(p+i)[0]=='6') a[i]=6; 310 if(*(p+i)[0]=='7') a[i]=7; 311 if(*(p+i)[0]=='8') a[i]=8; 312 if(*(p+i)[0]=='9') a[i]=9; 313 } 314 else if(sig[i]==2) 315 { 316 if(p[i][1]=='0'&&*(p+i)[0]=='1') {a[i]=10; } 317 if(p[i][1]=='1'&&*(p+i)[0]=='1') {a[i]=11; } 318 if(p[i][1]=='2'&&*(p+i)[0]=='1') {a[i]=12; } 319 if(p[i][1]=='3'&&*(p+i)[0]=='1') {a[i]=13; } 320 } 321 else if(sig[i]==0) 322 { 323 if(*(p+i)[0]=='a'||*(p+i)[0]=='A') a[i]=1; 324 if(*(p+i)[0]=='j'||*(p+i)[0]=='J') a[i]=11; 325 if(*(p+i)[0]=='q'||*(p+i)[0]=='Q') a[i]=12; 326 if(*(p+i)[0]=='k'||*(p+i)[0]=='K') a[i]=13; 327 } 328 } 329 } 330 int main() 331 { 332 // char c[15]; 333 int a[4]; 334 int sig[4]; 335 char ac[4][5]; 336 int num[24][4]; 337 int tn[4]; 338 int* pn=num[0]; 339 char str[64][3]; 340 char cs[4]={'+','-','*','/'}; 341 char tc[4]; 342 char* ps=str[0]; 343 fkind(cs,3,0,tc,ps); 344 cout<<"可以输入字母J,Q,K,A代替11,12,13,1:\n"; 345 for(int i=0;i<4;i++) 346 { 347 cin>>ac[i]; 348 if(ac[i][2]=='\0'&&(ac[i][1]=='1'||ac[i][1]=='2'||ac[i][1]=='3'||ac[i][1]=='0')&&ac[i][0]=='1') sig[i]=2; 349 else 350 { 351 if(ac[i][0]>='1'&&ac[i][0]<='9'&&ac[i][1]=='\0') sig[i]=1; 352 else sig[i]=0; 353 } 354 } 355 actoa2(a,ac,sig); 356 nkind(a,4,0,tn,pn); 357 int i,j; 358 int ok=0; 359 int tot=0; 360 for(i=0;i<24;i++) 361 { 362 for(j=0;j<64;j++) 363 { 364 tot++; 365 double x=0.0; 366 char c[15]; 367 equation(num[i],str[j],c); 368 x=ans2(c); 369 if(fabs(x-24.0)<=1e-5) 370 { 371 ok=1; 372 for(int k=0;k<11;k++) 373 { 374 if(k==2||k==4||k==7||k==10) 375 { 376 if(c[k]==';') c[k]='J'; 377 else if(c[k]==':') c[k]='T'; 378 else if(c[k]=='<') c[k]='Q'; 379 else if(c[k]=='=') c[k]='K'; 380 else if(c[k]=='1') c[k]='A'; 381 } 382 } 383 for(int k=0;k<11;k++) 384 cout<<c[k]; 385 cout<<"=24"<<endl; 386 } 387 if(fabs(x-4.0)<=1e-5) 388 { 389 cout<<"可用阶乘:\n"; 390 ok=2; 391 for(int k=0;k<11;k++) 392 { 393 if(k==2||k==4||k==7||k==10) 394 { 395 if(c[k]==';') c[k]='J'; 396 else if(c[k]==':') c[k]='T'; 397 else if(c[k]=='<') c[k]='Q'; 398 else if(c[k]=='=') c[k]='K'; 399 else if(c[k]=='1') c[k]='A'; 400 } 401 } 402 cout<<"("; 403 for(int k=0;k<11;k++) 404 cout<<c[k]; 405 cout<<")!=24"<<endl; 406 } 407 double y=0.0; 408 char d[15]; 409 equation3(num[i],str[j],d); 410 y=ans3(d); 411 if(fabs(y-24.0)<=1e-5) 412 { 413 ok=1; 414 for(int k=0;k<11;k++) 415 { 416 if(k==1||k==3||k==7||k==9) 417 { 418 if(d[k]==';') d[k]='J'; 419 else if(d[k]==':') d[k]='T'; 420 else if(d[k]=='<') d[k]='Q'; 421 else if(d[k]=='=') d[k]='K'; 422 else if(d[k]=='1') d[k]='A'; 423 } 424 } 425 for(int k=0;k<11;k++) 426 cout<<d[k]; 427 cout<<"=24"<<endl; 428 } 429 if(fabs(y-4.0)<=1e-5) 430 { 431 cout<<"可用阶乘:\n"; 432 ok=2; 433 for(int k=0;k<11;k++) 434 { 435 for(int k=0;k<11;k++) 436 { 437 if(k==1||k==3||k==7||k==9) 438 { 439 if(d[k]==';') d[k]='J'; 440 else if(d[k]==':') d[k]='T'; 441 else if(d[k]=='<') d[k]='Q'; 442 else if(d[k]=='=') d[k]='K'; 443 else if(d[k]=='1') d[k]='A'; 444 } 445 } 446 } 447 cout<<"("; 448 for(int k=0;k<11;k++) 449 cout<<d[k]; 450 cout<<")!=24"<<endl; 451 } 452 double e1=0.0; 453 char e[15]; 454 equation4(num[i],str[j],e); 455 e1=ans4(e); 456 if(fabs(e1-24.0)<=1e-5) 457 { 458 ok=1; 459 for(int k=0;k<11;k++) 460 { 461 if(k==1||k==4||k==6||k==10) 462 { 463 if(e[k]==';') e[k]='J'; 464 else if(e[k]==':') e[k]='T'; 465 else if(e[k]=='<') e[k]='Q'; 466 else if(e[k]=='=') e[k]='K'; 467 else if(e[k]=='1') e[k]='A'; 468 } 469 } 470 for(int k=0;k<11;k++) 471 cout<<e[k]; 472 cout<<"=24"<<endl; 473 } 474 if(fabs(e1-4.0)<=1e-5) 475 { 476 cout<<"可用阶乘:\n"; 477 ok=2; 478 for(int k=0;k<11;k++) 479 { 480 for(int k=0;k<11;k++) 481 { 482 if(k==1||k==4||k==6||k==10) 483 { 484 if(e[k]==';') e[k]='J'; 485 else if(e[k]==':') e[k]='T'; 486 else if(e[k]=='<') e[k]='Q'; 487 else if(e[k]=='=') e[k]='K'; 488 else if(e[k]=='1') e[k]='A'; 489 } 490 } 491 } 492 cout<<"("; 493 for(int k=0;k<11;k++) 494 cout<<e[k]; 495 cout<<")!=24"<<endl; 496 } 497 double f1=0.0; 498 char f[15]; 499 equation5(num[i],str[j],f); 500 f1=ans5(f); 501 if(fabs(f1-24.0)<=1e-5) 502 { 503 ok=1; 504 for(int k=0;k<11;k++) 505 { 506 if(k==0||k==4||k==6||k==9) 507 { 508 if(f[k]==';') f[k]='J'; 509 else if(f[k]==':') f[k]='T'; 510 else if(f[k]=='<') f[k]='Q'; 511 else if(f[k]=='=') f[k]='K'; 512 else if(f[k]=='1') f[k]='A'; 513 } 514 } 515 for(int k=0;k<11;k++) 516 cout<<f[k]; 517 cout<<"=24"<<endl; 518 } 519 if(fabs(f1-4.0)<=1e-5) 520 { 521 cout<<"可用阶乘:\n"; 522 ok=2; 523 for(int k=0;k<11;k++) 524 { 525 for(int k=0;k<11;k++) 526 { 527 if(k==0||k==4||k==6||k==9) 528 { 529 if(f[k]==';') f[k]='J'; 530 else if(f[k]==':') f[k]='T'; 531 else if(f[k]=='<') f[k]='Q'; 532 else if(f[k]=='=') f[k]='K'; 533 else if(f[k]=='1') f[k]='A'; 534 } 535 } 536 } 537 cout<<"("; 538 for(int k=0;k<11;k++) 539 cout<<f[k]; 540 cout<<")!=24"<<endl; 541 } 542 double g1=0.0; 543 char g[15]; 544 equation6(num[i],str[j],g); 545 g1=ans6(g); 546 if(fabs(g1-24.0)<=1e-5) 547 { 548 ok=1; 549 for(int k=0;k<11;k++) 550 { 551 if(k==0||k==3||k==6||k==8) 552 { 553 if(g[k]==';') g[k]='J'; 554 else if(g[k]==':') g[k]='T'; 555 else if(g[k]=='<') g[k]='Q'; 556 else if(g[k]=='=') g[k]='K'; 557 else if(g[k]=='1') g[k]='A'; 558 } 559 } 560 for(int k=0;k<11;k++) 561 cout<<g[k]; 562 cout<<"=24"<<endl; 563 } 564 if(fabs(g1-4.0)<=1e-5) 565 { 566 cout<<"可用阶乘:\n"; 567 ok=2; 568 for(int k=0;k<11;k++) 569 { 570 for(int k=0;k<11;k++) 571 { 572 if(k==0||k==3||k==6||k==8) 573 { 574 if(g[k]==';') g[k]='J'; 575 else if(g[k]==':') g[k]='T'; 576 else if(g[k]=='<') g[k]='Q'; 577 else if(g[k]=='=') g[k]='K'; 578 else if(g[k]=='1') g[k]='A'; 579 } 580 } 581 } 582 cout<<"("; 583 for(int k=0;k<11;k++) 584 cout<<g[k]; 585 cout<<")!=24"<<endl; 586 } 587 } 588 if(ok==1) 589 break; 590 if(tot==1536&&ok==0) 591 cout<<"NO ANSWER!\n"; 592 } 593 char ch; 594 cout<<"按任意键结束....."; 595 cin>>ch; 596 return 0; 597 }