(深度優先搜尋第二課) 蒜頭學算數 DFS

2021-07-09 02:25:29 字數 1160 閱讀 7486

蒜頭的數學實在是太差了,於是老師把他關到小黑屋讓他閉門修煉。老師跟他一張紙,上面一排寫著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碼要比"-"小。

樣例1輸入:

7

輸出:

1+2-3+4-5-6+7

1+2-3-4+5+6-7

1-2+3+4-5+6-7

1-2-3-4-5+6+7

**:

#include#includeusing namespace std;

int n; // 儲存讀入的整數n

bool opr[10]; // 可以用乙個bool陣列儲存所有n-1個符號,我們用true表示加號"+",用false表示減號"-"。

bool found = false; // 表示是否找到一組解,如果沒找到的話需要在最後輸出"none"

// dfs函式,儲存兩個狀態:deep表示遞迴深度,就是列舉到第幾個數字左邊的符號;sum表示之前部分表示式的值。

// 如果列舉完成後sum的值剛好為0,則輸出這組方案。我們需要在搜尋的過程中用opr陣列儲存狀態。

void dfs(int deep, int sum)

}printf("\n");

}return;

}opr[deep] = true;//由於優先遍歷了'+'在前的情況,輸出順序會自然符合ansi碼表順序

dfs(deep + 1, sum+deep+1);//deep(第幾個)和實際數字是加一的關係

opr[deep] = false;

dfs(deep + 1, sum-deep-1);

}int main()

動手學深度學習 第二課

基本概念 讀入文字 分詞 建立字典 將詞轉為索引 將文字按段落讀取,再將文字轉為小寫,使用正則的方法,消除其中的非字母的字元,得到句子。import re with open 1.txt r as f print re.sub a z line.strip lower for line in f 分...

深度學習第二課 Softmax回歸

與第一課線性回歸 linear regression 不同,softmax回歸針對的是多分類的情況,即labels不再僅有0,1兩個分類。softmax通過指數運算將最後的分類轉為0 1間的概率,在終於類別概率中,數值大的為 概率。與線性回歸損失不同,softmax函式計算損失採用的是交叉熵損失 c...

會計學(第二課)筆記

會計學內容沒管理學好學。知識好零散,沒有思維導圖。教材上的重點不突出,猛地一下還找不到知識點。但還是需要提前學,走在前頭,才不怕掉了鍊子跟不上,被滾雪球。學習永遠都是越學越輕鬆。當我基礎鋪墊一層後,後面的學習就像砍柴前磨好了刀。根據今天的上課體驗。打算按照課後的問題來展開筆記。也方便定義重點。然後用...