Ⅰ python運行後顯示Traceback (most recent call last):什麼意思
意思是:回溯(最近的一次呼叫)
這里表示您的Python程序出現了異常,括弧中通俗的解釋就是代碼中引發異常的位置。
Python中一般使用try-except捕獲異常。這樣,如果引發異常,程序可對異常進行處理。避免了Traceback(most recent call last)等這樣一些不友好的語句出現。
比如下面一個除零操作:
import traceback
try:
num = 1/0
except:
traceback.print_exc()
Traceback (most recent call last):
File "C:/Users/Administrator/AppData/Roaming/JetBrains/PyCharmCE2021.2/scratches/scratch.py", line 5, in <mole>
num = 1/0
ZeroDivisionError: division by zero
黑體標注的是異常具體位置。
希望回答對您有幫助!更多精彩,請關注我!
Ⅱ 硬幣兌換問題回溯法偽代碼
A數組用來存放硬幣,數值1代表正面,0代表反面;
static int s;s是存放每列狀態的數初始為0代表一列都沒翻,第幾位為1就代表第幾列被翻轉
int turncoin(A,S,N,n) //A(N*9數組) ,N是行數 n代表當次翻哪一列 初次調用n=0,代表第一列
{ int i=1;//因為每列段悶只有兩種狀態,所以每列只翻一次
static int max=0;//用來存放翻轉後正面朝上的最大硬幣數;
static int S;//大S用來存儲當前硬幣堆的翻轉狀態
do {turncoin(A,S,N,n+1);if (n==8){ int tem=sum //sum為遍歷A數組,所有元素之和(即為當前正面朝上的硬幣數)
if(sum>max){S=s; //把當前翻轉狀態存儲到S,S內總是存儲著擁有正面朝上硬幣數量最高的一種翻轉狀態;}}}while(i--&&transform(N,n));
//transform()函數翻轉第N列的硬幣 並且對s的第n位置一 成功返回ture 並且對是 實現就是for(i=0;
i
拓展資料:
一、題目描述:
一個翻硬幣的游戲,有N(N <=10000)行硬幣,每行有九個硬幣,排成一個N*9的方陣,有的硬幣正面朝上,有的反面朝上。我們每次可把一整行或者一整列的所有硬幣翻過來,請問怎麼翻,使得正面朝上的硬幣盡量多(翻硬幣無次數限制)。
二、思路分析:
枚舉2^9種列的翻法。
遍歷N行,如果某行正面朝上的少,翻之;如果正面朝上的多,不翻
記下使得正面最多的方法即可
耗時O(2^9 * N)
這個得到的是最優解.用位運算效率還是很高的.
對每一列,都用一個9位的數表示,一共有N個
然後便利所有的9位狀態,(000000000)-(111111111) (二進制)
對於每個狀態,都與這N個數握喚彎異或,每次異或後累加所有的1的鏈液值假設為k,如果k小於5則k=9-k.
對N個數累加所有的k,得到最終累加和.
求出所有狀態下累加和最大的,就是正面朝上的硬幣盡量多的個數.
翻面的方法橫列分別是最優解的8位狀態和與之對應的每個數異或後累加和k是否小於5.