#include <stdio.h>
//核心程式就只有一段,目的在于自動生成判斷輸出陳述句,避免機械性作業
//整個程序分兩步,第一步,符號全排列,利用printf加回圈自動生成判斷——輸出陳述句,列出加減乘除四個符號放入三個位置的所有情況,是4*4*4次,三重回圈,再加入括號的情況,只需將上面的寫好的三重回圈再復制四遍,修改一下括號的位置就行,總共五大段,最終列印輸出所有的if陳述句
//第二步,將輸出的結果全部復制進已經撰寫好的四個數的全排列程式代碼,最終完成暴力求解24點,程式可輸出所有情況
//五大段窮舉所有的if陳述句的代碼看看就好,只是為了節省重復性勞動。最終的完整代碼很長,但是機械性編碼部分第一步已經幫我們完成了
int main()
{
char b[5];
char c,d;
b[0]='+';
b[1]='-';
b[2]='*';
b[3]='/';
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
printf("if((list[0]%clist[1])%clist[2]%clist[3]-24.0==0.0)\n",b[i],b[j],b[k]);
printf("\tprintf(");
printf("\"");
printf("(");
printf("%%");
printf("d");
printf("%c",b[i]);
printf("%%");
printf("d");printf(")");
printf("%c",b[j]);
printf("%%");
printf("d");
printf("%c",b[k]);
printf("%%");
printf("d");
printf("=24");
printf("\\");
printf("n");
printf("\"");
printf(",int(list[0]),int(list[1]),int(list[2]),int(list[3]));");
printf("\n");
}
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
printf("if((list[0]%clist[1]%clist[2])%clist[3]-24.0==0.0)\n",b[i],b[j],b[k]);
printf("\tprintf(");
printf("\"");
printf("(");
printf("%%");
printf("d");
printf("%c",b[i]);
printf("%%");
printf("d");
printf("%c",b[j]);
printf("%%");
printf("d");
printf(")");
printf("%c",b[k]);
printf("%%");
printf("d");
printf("=24");
printf("\\");
printf("n");
printf("\"");
printf(",int(list[0]),int(list[1]),int(list[2]),int(list[3]));");
printf("\n");
}
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
printf("if(list[0]%c(list[1]%clist[2])%clist[3]-24.0==0.0)\n",b[i],b[j],b[k]);
printf("\tprintf(");
printf("\"");
printf("%%");
printf("d");
printf("%c",b[i]);
printf("(");
printf("%%");
printf("d");
printf("%c",b[j]);
printf("%%");
printf("d");
printf(")");
printf("%c",b[k]);
printf("%%");
printf("d");
printf("=24");
printf("\\");
printf("n");
printf("\"");
printf(",int(list[0]),int(list[1]),int(list[2]),int(list[3]));");
printf("\n");
}
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
printf("if(list[0]%c(list[1]%clist[2]%clist[3])-24.0==0.0)\n",b[i],b[j],b[k]);
printf("\tprintf(");
printf("\"");
printf("%%");
printf("d");
printf("%c",b[i]);
printf("(");
printf("%%");
printf("d");
printf("%c",b[j]);
printf("%%");
printf("d");
printf("%c",b[k]);
printf("%%");
printf("d");
printf(")");
printf("=24");
printf("\\");
printf("n");
printf("\"");
printf(",int(list[0]),int(list[1]),int(list[2]),int(list[3]));");
printf("\n");
}
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
printf("if(list[0]%clist[1]%c(list[2]%clist[3])-24.0==0.0)\n",b[i],b[j],b[k]);
printf("\tprintf(");
printf("\"");
printf("%%");
printf("d");
printf("%c",b[i]);
printf("%%");
printf("d");
printf("%c",b[j]);
printf("(");
printf("%%");
printf("d");
printf("%c",b[k]);
printf("%%");
printf("d");
printf(")");
printf("=24");
printf("\\");
printf("n");
printf("\"");
printf(",int(list[0]),int(list[1]),int(list[2]),int(list[3]));");
printf("\n");
}
}
}
return 0;
}
//以下才是最終的代碼格式
#include<stdio.h>
void swap(float *a, float *b)
{
float m;
m = *a;
*a = *b;
*b = m;
}
void perm(float list[], int k, int m)
{
int i;
int a,b,c,d;
char sym[2];
if(k > m)
{
//第一步生成的所有結果直接復制到這個if陳述句下即可實作功能,因為生成的結果很長,就不在這里復制粘貼了
}else{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{ float list[3];
scanf("%f%f%f%f",&list[0],&list[1],&list[2],&list[3]);
perm(list, 0, 3);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93078.html
標籤:C語言
上一篇:1. 從鍵盤輸入一行字符,要求輸出其相應的密碼。密碼規則:每個英文字母變成其后的第4個字母,如A變成E, z變成d,非字母字符保持不變.
下一篇:vs2017除錯框好小
