報數序列:
n=1: 1
n=2: 11 # 讀做 1個1,記為11;
n=3: 21 # 讀作 2個1,記為21;
n=4:1211 # 讀作 1個2,1個1,記為1211;
…現在要求給定乙個n(1<=n<=30),輸出報數序列的第n項。
一步一步來,分塊講解**。實質上先統計個數;在統計元素。
# -*- coding: utf-8 -*-
'''題目簡述:
報數序列是乙個整數序列,按照其中整數順序進行報數,得到下乙個數。
基本思路:
比如: '11' --> 個數:2 ; 數字:1 --> 多做 '21'
'''class
solution()
:def
countandsay
(self,n)
:if n not
inrange(1
,31):
# 檢查輸入資料範圍
return
'the number is out,quit...'
if n ==1:
# n=1的特殊情況
return
'1' pointer =
0 rawstr =
'1'# 最原始的字串
countlist =
# 統計個數和元素
while n >1:
#if pointer+
1<
len(rawstr)
:# 若上乙個字串沒有統計完畢
pass
else
:# 若統計完畢
str(pointer+1)
)# 新增個數
)# 新增元素
rawstr=
''.join(countlist)
# countlist =
pointer=
0 n-=
1return rawstr
if __name__ ==
'__main__'
: n =
2 solu = solution(
) res = solu.countandsay(n)
print
('結果為\n'
,res)
首先是若兩個字元相等情況,指標+1並借助continue跳出迴圈。
while n >1:
#if pointer+
1<
len(rawstr)
:# 若上乙個字串沒有統計完畢
if rawstr[pointer]
== rawstr[pointer+1]
:#若前後兩個 字元 相等
pointer+=
1#則指標+1,並結束當前迴圈
else
:pass
continue
若兩個字元不等,則直接統計當前元素的個數與元素內容即可。
if rawstr[pointer]
== rawstr[pointer+1]
:#若前後兩個 字元 相等
pointer+=
1#則指標+1,並結束當前迴圈
else
:# 若前後兩個不相等
str(pointer+1)
)# 新增個數
)# 新增元素
rawstr = rawstr[pointer+1:
]# 擷取後面字串
pointer =
0# 並把指標歸0
continue
# -*- coding: utf-8 -*-
'''題目簡述:
報數序列是乙個整數序列,按照其中整數順序進行報數,得到下乙個數。
基本思路:
比如: '11' --> 個數:2 ; 數字:1 --> 多做 '21'
'''class
solution()
:def
countandsay
(self,n)
:if n not
inrange(1
,31):
# 檢查輸入資料範圍
return
'the number is out,quit...'
if n ==1:
# n=1的特殊情況
return
'1' pointer =
0 rawstr =
'1'# 最原始的字串
countlist =
# 統計個數和元素
while n >1:
#if pointer+
1<
len(rawstr)
:# 若上乙個字串沒有統計完畢
if rawstr[pointer]
== rawstr[pointer+1]
:#若前後兩個 字元 相等
pointer+=
1#則指標+1,並結束當前迴圈
else
:# 若前後兩個不相等
str(pointer+1)
)# 新增個數
)# 新增元素
rawstr = rawstr[pointer+1:
]# 擷取後面字串
pointer =
0# 並把指標歸0
continue
else
:# 若統計完畢
str(pointer+1)
)# 新增個數
)# 新增元素
rawstr=
''.join(countlist)
# countlist =
pointer=
0 n-=
1return rawstr
if __name__ ==
'__main__'
: n =
5 solu = solution(
) res = solu.countandsay(n)
print
('結果為\n'
,res)
a. 其實不難。 佇列實現報數遊戲
問題描述 有m個人,從1到m編號,按照編號順序圍成一圈。從第乙個人開始報數 從1報到n 凡報到n的人退出圈子。然後下乙個小朋友會繼續從 1 開始報數,直到只剩乙個人為止 問 最後留下的人的編號是幾號。具體方法 的注釋已經很詳細了。開乙個佇列不斷刪除,很簡單,稍微想一下或畫個草圖就ok了 includ...
報數的golang實現
報數序列是乙個整數序列,按照其中的整數的順序進行報數,得到下乙個數。其前五項如下 1.1 2.11 3.21 4.1211 5.111221 給定乙個正整數 n 1 n 30 輸出報數序列的第 n 項。注意 整數順序將表示為乙個字串。輸入 1 輸出 1 輸入 4輸出 1211 理解題意 首先我們還是...
報數遊戲python 解答
又做了個小題目,報數遊戲。題目詳情 一種報數遊戲是從1開始連續報數,如果報到7的倍數 7,14,21,28 或者包含數字7的數 7,17,27,37 就用拍手代替這個數而不能報出。假設你連續聽到m聲拍手,問造成你聽到m聲拍手的第一下拍手所代表的數是幾?例如,你聽到了兩次連續的拍手,最小的可能這兩次拍...