題目傳送門:
這個題dalao都是用字尾表示式做的,而我這種蒟蒻什麼都不會只能強行爆搜失敗。思路簡單:假設輸入的四個數為6 6 6 6,那麼我們可以看出答案可以為6+6+6+6=24或6*6-6-6=24,那麼無論如何式子都是由三個運算符號和四個數字組成的,那麼在dfs(i)中我們根據i的奇偶來判斷列舉的是什麼(奇數字數字,偶數字運算子最後i==8時判斷)。注意點:題目中要求+或*時兩數若有大小先輸大小(頭腦發昏的我開始-和/都交換了位置),不要忘記了1 3 5 7,這種由兩部分分別運算最後合起來的式子(3-1=2,7+5=12,12*2=24)。
那麼最後來解釋一下為什麼說是偽題解,以下程式它本身非常神奇地無法處理輸入的四個數中有重複的數且無解的情況(貌似是棧溢位了但我弄了兩個小時也沒弄好),直到我火了,我開始用乙個sum1判斷這個輸入有無重複的數,再用sum規定在有重複的數(即sum1=1)有乙個搜尋底線(不太好用深度或廣度來形容),簡單的說,就是讓它在棧溢位的邊緣瘋狂試探,搜尋時不再死迴圈。以下為**(這個300多行的**令人神魂顛倒儘管很多是複製的):
#include#includeint a[100]=,step1[100]=,step2[100]=,vis[1000]=;
int flag=0,sum=0,sum1=0;
int judge1()
else if(step2[i]==2)
else if(step2[i]==3)
else if(step2[i]==4)
if(ans==24)
return 1;
return 0;
}int judge2()
else if(step2[1]==2)
else if(step2[1]==3)
else if(step2[1]==4)
if(step2[3]==1)
else if(step2[3]==2)
else if(step2[3]==3)
else if(step2[3]==4)
if(step2[2]==1)
ans1=ans1+ans2;
else if(step2[2]==2)
ans1=ans1-ans2;
else if(step2[2]==3)
ans1=ans1*ans2;
else if(step2[2]==4)
if(ans1==24) return 1;
return 0;
}int write1()
else if(step2[1]==2)
else if(step2[1]==3)
else if(step2[1]==4)
for(i=2;i<=3;i++)
if(step2[i]==1)
else if(step2[i]==2)
else if(step2[i]==3)
else if(step2[i]==4)
return 0;
}int write2()
else if(step2[1]==2)
else if(step2[1]==3)
else if(step2[1]==4)
if(step2[3]==1)
else if(step2[3]==2)
else if(step2[3]==3)
else if(step2[3]==4)
if(step2[2]==1)
else if(step2[2]==2)
else if(step2[2]==3)
else if(step2[2]==4)
return 0;
}int dfs(int i)
return 0;
}if(flag==1)
return 0;
if(sum>3700&&sum1==1) return 0;
if(sum>5000) return 0;
if(i%2==1)
}else
}return 0;
}int dfs2(int i)
return 0;
}if(flag==1)
return 0;
if(sum>3700&&sum1==1) return 0;
if(sum>5000) return 0;
if(i%2==1)
}else
}return 0;
}int main()
memset(vis,0,sizeof(vis));
dfs(1);
if(flag==0)
return 0;
}
2011 10 29模擬 24點遊戲題解
題目描述 24點遊戲是乙個非常有意思的遊戲,很流行,玩法很簡單 給你4張牌,每張牌上有數字 其中a代表1,j代表11,q代表12,k代表13 你可以利用數學中的加 減 乘 除以及括號想辦法得到24,例如 a k j q等價於 1 13 11 12 24 加減乘不用多說了,但除法必須滿足能整除才能除!...
vijos P1134 算24點 題解
include include include include include using namespace std bool used 5 int a 5 bool mem 1000 double qiku 120 1001 int ans void work double now,int k ...
24點演算法
include typedef float cdecl type myfun float float float funadd float x,float y float funsub float x,float y float funmul float x,float y float fundiv...