舉個例子來闡明解題的基本思路。例如,n=4321,我們對其各個數字進行分解,4321=4000+300+20+1,然後從低位到高位一次進行分析。個位1,只能含乙個1,而十位20又可分為1~10和11~20,個位數字有兩次迴圈,而每次迴圈會出現乙個1和乙個2,十位10~19又含有十個1,20含有乙個2。百位300,低兩位數字有3次迴圈,同時,100~199和200~299又各含有一百個1和一百個2。
故我們得到這樣的結論,每增加乙個高位,應該這樣計算新增的個數:高位的數字(即低位迴圈次數)乘以乙個低位迴圈中的1 2數,高位數字為1或2時新增的1 2數,這個要分類討論,高位數在【0,1】【1,2】【2,9】三個區間新增的1 2數不同,要具體分析。高位數小於1時,不會在該位出現1 2,高位數在等於1(2)時,低位數最大值+1即為新增的高位1(2),高位數大於1(2)時,該位的位權值即為新增的高位1(2)。**如下
#include #include #define mod 20123
int ten[110],len;
char s[10000];
int cal(int x, int i, int temp)
else if (s[i]-'0'>x)
ret=ten[len-1-i];
return ret;
}int main()
printf("%d\n",ans);
}return 0;
}
九度1184解題報告
這是乙個二叉樹的問題,題目如下 事實上考的就是二叉樹的資料結構以及先序和中序遍歷。一般來說,僅僅由先序遍歷序列無法得到中序序列,然而,本題特殊的地方在於先序遍歷序列中給出了遍歷中遇到的空指標,這樣就很容易根據序列構造二叉樹 依次訪問先序序列,遇到 就返回空指標,遇到非 字元就構造乙個對應的節點,然後...
九度1019解題報告
關於計算器的題目該題要編寫的計算器比一般的計算器簡單,因為不含括號,運算優先順序就兩種,先算乘除法就好,這是受到了fripside同學的啟發,不需要算術符號棧,只需要數字棧,遇加減號就將下乙個數字入棧 遇減號將數字反號入棧 遇乘除號,就將棧頂的數字取出運算後再入棧。當處理完整個計算式時,將棧中的所有...
九度1139解題報告
最小子矩陣問題是求最優解的一類題,看到題目就想到兩種做法,乙個是dp,乙個是搜尋遍歷的方法。雖然深搜很多時候並不是用來解決最優解問題的,但是dp的做法,我暫時沒有想到該怎麼做,於是就先用dfs,如下 include using namespace std define inf 999999999 i...