蒜頭的數學實在是太差了,於是老師把他關到小黑屋讓他閉門修煉。老師跟他一張紙,上面一排寫著1, 2, 3...n這n個數,中間用空白分隔。老師讓他在空白處填上加號或者減號。他讓蒜頭君求出一共有多少種加運算子的方法使得整個表示式的值為0,並輸出所有的方案。比如n=7時,1 2 3 4 5 6 7排成一排,一種插入符號的方案為1+2-3+4-5-6+7=0。是不是很有趣,快來幫蒜頭君解出這題吧(*´▽`)ノノ
輸入為一行,包含乙個整數n(3≤n≤9)。
輸出為所有在每對數字間插入「+」或「-」後能得到和為零的數列,並按照字典(ascii碼)序排列。如果無解就輸出一行none。
不知道字典序和ascii也不要緊,我們看樣例輸出就清楚啦,1到n排成一排,先每個位置優先放"+",再放"-",這麼放的原因是因為"+"的ascii碼要比"-"小。
樣例輸入
7樣例輸出
1+2-3+4-5-6+71+2-3-4+5+6-7
1-2+3+4-5+6-7
1-2-3-4-5+6+7
#include using namespace std;
int n;
bool opr[10]; //用true表示加號"+",用false表示減號"-"。
bool found = false; // 表示是否找到一組解,如果沒找到的話需要在最後輸出"none"
/*dfs函式,儲存兩個狀態:deep表示遞迴深度,就是列舉到第幾個數字左邊的符號;
sum表示之前部分表示式的值;
如果列舉完成後sum的值剛好為0,就輸出;
我們需要在搜尋的過程中用opr陣列儲存狀態。
*/void dfs(int deep, int sum) {
if (deep == n) {
if (sum == 0) {
found = true;
for (int i=1; i
蒜頭學算術,計蒜客演算法學習記錄
蒜頭的數學實在是太差了,於是老師把他關到小黑屋讓他閉門修煉。老師跟他一張紙,上面一排寫著1,2,3 n這n個數,中間用空白分隔。老師讓他在空白處填上加號或者減號。他讓蒜頭君求出一共有多少種加運算子的方法使得整個表示式的值為0,並輸出所有的方案。比如n 7時,1 2 3 4 5 6 7排成一排,一種插...
蒜頭君學英語
蒜頭君快要考托福了,這幾天,蒜頭君每天早上都起來記英語單詞。花椰妹時不時地來考一考蒜頭君 花椰妹會詢問蒜頭君乙個單詞,如果蒜頭君背過這個單詞,蒜頭君會告訴花椰妹這個單詞的意思,不然蒜頭君會跟花椰妹說還沒有背過。單詞是由連續的大寫或者小寫字母組成。注意單詞中字母大小寫是等價的。比如you和you是乙個...
蒜頭君學英語
題目 問題描述 蒜頭君快要考托福了,這幾天,蒜頭君每天早上都起來記英語單詞。花椰妹時不時地來考一考蒜頭君 花椰妹會詢問蒜頭君乙個單詞,如果蒜頭君背過這個單詞,蒜頭君會告訴花椰妹這個單詞的意思,不然蒜頭君會跟花椰妹說還沒有背過。單詞是由連續的大寫或者小寫字母組成。注意單詞中字母大小寫是等價的。比如yo...