該題目的難點在於n可能很大,超過了整數表示的範圍,所以一般有兩種思路,一種是用字串表示整數,並實現++操作符,另一種是把該題目當做排列組合來做,使用遞迴可以實現,下面給出使用遞迴實現的**:
void __print(char digit_array, int
index, int n)
return;
}//這是為了在列印是不會像出現0012這樣的情況,
//但是又要保證像1002這種情況的出現。
//整個字元陣列開始使用『 』(空格)初始化的
if (digit_array[index] != ' ')
digit_array[index] = '0';
__print(digit_array, index + 1, n);
//從1開始,該位為0時,由上一句負責
for (int i = 1; i < 10; ++i)
}void printn(int n)
digit_array[n] = '\0';
//從第一位開始遞迴
__print(digit_array, 0, n);
deletedigit_array;
}
測試**:
#include "stdafx.h"
#include
using
namespace
std;
int _tmain(int argc, _tchar* argv)
程式執行截圖:
使用遞迴可以列印出很大的數,具體和系統分配的棧空間大小有關,n太大了,遞迴深度過大,使棧溢位將不能得到解答。而文章開頭的第一種思路則和系統當時所能分配的空間大小決定,我認為這種思路的效率高於遞迴實現,因為遞迴實現其實也是在做++運算,加上遞迴的耗費,自然就慢了。
每日一題 列印沙漏
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可能...
0 力扣每日一題
題目傳送門 這題我的思路比較簡單.簡明表示如下 作用 初始化鍊錶,使得之後每次在鍊錶尾部新增元素都變得完全一樣,很大程度減少了 量.包含在標頭檔案queue中,可以方便地維護乙個有一定優先順序的佇列,也就是堆.定義有三個引數 資料 容器 用陣列實現的容器,包含vector deqeue,不包含lis...
每日一題 新21點 概率題目
2020 06 03 一道穿了概率外衣的dp問題 思路核心在於如何理解題意,這個概率是如何計算得到的。有兩種思路,第一種思路從前往後進行推導,但是我沒成功。暫且不表。主要講一下比較好的第二種思路。既然是一道概率題,我們首先把遊戲結束時的成功的事件設定為1。成功事件是指,最後結果大於等於k且小於等於n...