38.报数(C++实现)
生活随笔
收集整理的這篇文章主要介紹了
38.报数(C++实现)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
報(bào)數(shù)序列是一個(gè)整數(shù)序列,按照其中的整數(shù)的順序進(jìn)行報(bào)數(shù),得到下一個(gè)數(shù)。其前五項(xiàng)如下:
1 被讀作 “one 1” (“一個(gè)一”) , 即 11。
11 被讀作 “two 1s” (“兩個(gè)一”), 即 21。
21 被讀作 “one 2”, “one 1” (“一個(gè)二” , “一個(gè)一”) , 即 1211。
給定一個(gè)正整數(shù) n(1 ≤ n ≤ 30),輸出報(bào)數(shù)序列的第 n 項(xiàng)。
注意
整數(shù)順序?qū)⒈硎緸橐粋€(gè)字符串。
示例
示例 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為各有效數(shù)字累計(jì)個(gè)數(shù)int ss;a[0] = 0;//第0個(gè)位置的元素不被使用,無(wú)效元素位置a[1] = 1;//初始值for (int i = 1; i < n; i++)//共更迭n次{s = 0; //有效數(shù)字位數(shù)歸零for (int j = 1; a[j] <= 9 && a[j] > 0; j++)//計(jì)算a數(shù)組中有效數(shù)字位數(shù)s++;ss = 1;//指針ss歸位,重新指向第一個(gè)元素while (sum < s&&a[ss]!=0)//如果未處理完所有的有效數(shù)字就繼續(xù)循環(huán){while (a[ss] == a[ss+1])//如果當(dāng)前數(shù)字和下一個(gè)數(shù)字相等則指針ss跳向下一個(gè)有效數(shù)字,且當(dāng)前有效數(shù)字的連續(xù)累計(jì)個(gè)數(shù)加一{ss++;z += 1;}c[v++] = z;//將累計(jì)數(shù)字個(gè)數(shù)賦值進(jìn)c數(shù)組c[v++] = a[ss++];//將數(shù)字元素賦值給下一個(gè)單位sum += z;//本次循環(huán)處理了z個(gè)數(shù)字,當(dāng)前總共處理了sum個(gè)數(shù)字z = 1;//將z歸為1,以方便下次使用}for (v-1; v>0; v--)//將c數(shù)組中的元素傳入a數(shù)組中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; }總結(jié)
以上是生活随笔為你收集整理的38.报数(C++实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: excel实现批量查找
- 下一篇: QT·页面跳转,怎么切换到另一个界面(纯