外觀數列是指具有以下特點的整數序列:
d, d1, d111, d113, d11231, d112213111, ...
它從不等於 1 的數字d
開始,序列的第 n+1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個d
,所以就是d1
;第 2 項是 1 個d
(對應d1
)和 1 個 1(對應 11),所以第 3 項就是d111
。又比如第 4 項是d113
,其描述就是 1 個d
,2 個 1,1 個 3,所以下一項就是d11231
。當然這個定義對d
= 1 也成立。本題要求你推算任意給定數字d
的外觀數列的第 n 項。
輸入第一行給出 [0,9] 範圍內的乙個整數d
、以及乙個正整數 n(≤ 40),用空格分隔。
在一行中給出數字d
的外觀數列的第 n 項。
1 8
1123123111
大致思路:
思考:
關於字串長度:這個題目很難分析需要多長的字串,不過輸入只可能有0-9十種數字和1-40的n值,因此只需讓n=40時,字串足夠長就夠了。我測試的結果是:
所以我就開了長度為100 000的字串。
關於演算法的設計:這道題我第一感覺其實是不需要開陣列,因為每次遞迴過程僅需要知道區域性的資訊即可,不需要對整體的資訊進行整理。但是問題是這道題需要多次利用已生成的結果作為新的資料進行處理,所以一定要把結果保留下來才可以進行多次的遞迴。至少我是覺得這道題一定要開陣列進行儲存才可以。
#include intmain()
, string2[100000] = ;
char *s1 = string1, *s2 = string2, *temp;
char *p1, *p2;
scanf(
"%s %d
", s1, &n);
for(int i = 1; i < n; i++) /*
loop through nth string
*/ }
/*swap
*/temp = s1, s1 = s2, s2 =temp;
}puts(s1);
return0;
}
C語言指標(2) 指標的應用
include include void swap int x,int y intmain 執行結果 交換前a 1,b 2 交換後a 2,b 1 請按任意鍵繼續.可以用乙個指標變數指向乙個陣列元素。例如 int a 10 int p a 0 當然定義時也可寫成 int p a include inc...
作業 5 指標應用1
1 自學教材 第8章 指標,回答以下問題 答 在c語言中,如果定義了乙個變數,在編譯時就會根據該變數的型別給它分配相應大小的記憶體單元。而為了對記憶體單元中的資料進行操作,一般來按位址訪問 答 定義指標變數的一般形式為 型別名 指標變數名 如 int pointer 1,pointer 2 答 指標...
實驗9 指標應用1
1 程式填空 下列程式在陣列中同時查詢最大元素和最小元素的下標,分別存放在 main 函式的max 和 min 變數中。要求 根據執行結果分析程式和填空,並注釋說明填充依據。include void findbypoint int int,int int void find int a,int n,...