python實現報數

2021-10-13 19:09:34 字數 3217 閱讀 3283

報數序列

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聲拍手的第一下拍手所代表的數是幾?例如,你聽到了兩次連續的拍手,最小的可能這兩次拍...