38.报数(C++实现)
生活随笔
收集整理的這篇文章主要介紹了
38.报数(C++实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
報數序列是一個整數序列,按照其中的整數的順序進行報數,得到下一個數。其前五項如下:
1 被讀作 “one 1” (“一個一”) , 即 11。
11 被讀作 “two 1s” (“兩個一”), 即 21。
21 被讀作 “one 2”, “one 1” (“一個二” , “一個一”) , 即 1211。
給定一個正整數 n(1 ≤ n ≤ 30),輸出報數序列的第 n 項。
注意
整數順序將表示為一個字符串。
示例
示例 1:
輸入: 1
輸出: “1”
示例 2:
輸入: 4
輸出: “1211”
源碼
string countAndSay(int n) {string b;int a[10000] = { 0 }, z = 1, s = 0, v = 1, sum = 0, c[10000] = { 0 };//z為各有效數字累計個數int ss;a[0] = 0;//第0個位置的元素不被使用,無效元素位置a[1] = 1;//初始值for (int i = 1; i < n; i++)//共更迭n次{s = 0; //有效數字位數歸零for (int j = 1; a[j] <= 9 && a[j] > 0; j++)//計算a數組中有效數字位數s++;ss = 1;//指針ss歸位,重新指向第一個元素while (sum < s&&a[ss]!=0)//如果未處理完所有的有效數字就繼續循環{while (a[ss] == a[ss+1])//如果當前數字和下一個數字相等則指針ss跳向下一個有效數字,且當前有效數字的連續累計個數加一{ss++;z += 1;}c[v++] = z;//將累計數字個數賦值進c數組c[v++] = a[ss++];//將數字元素賦值給下一個單位sum += z;//本次循環處理了z個數字,當前總共處理了sum個數字z = 1;//將z歸為1,以方便下次使用}for (v-1; v>0; v--)//將c數組中的元素傳入a數組中a[v] = c[v];sum = 0;//sum歸零v = 1;//v歸一}s = 0;for (int j = 1; a[j] <= 9 && a[j] > 0; j++)s++;for (int i = 1; s>0 && a[i] != 0; s--,i++)b+= to_string(a[i]);return b; }總結
以上是生活随笔為你收集整理的38.报数(C++实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel实现批量查找
- 下一篇: QueryList列表内容采集