每日一題21 從0列印到具有n位整數的最大數

2021-06-30 16:28:16 字數 1005 閱讀 1980

該題目的難點在於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...