迴圈數是那些不包括0且沒有重複數字的整數(比如81362)並且還應同時具有乙個有趣的性質, 就像這個例子: 8 1 3 6 2
如果你從最左邊的數字開始(在這個例子中是8)向右數最左邊這個數(如果數到了最右邊就回到最左邊),你會停止在另乙個新的數字(如果沒有停在乙個不同的數字上,這個數就不是迴圈數).就像: 8 1 3 6 2 從最左邊接下去數8個數字: 1 3 6 2 8 1 3 6 所以我們得到的下乙個數字是6。
重複這樣做 (這次往後6個數字) 並且你會停止在乙個新的數字上: 2 8 1 3 6 2, 也就是我們得到了2
再這樣做 (這次往後數2個): 8 1,我們得到了1.
再一次 (這次往後數1個): 3
又一次: 6 2 8 這時你回到了起點,在經過每個數字一次後回到起點的就是迴圈數。如果你經過每乙個數字一次以後沒有回到起點, 你的數字不是乙個迴圈數。
給你乙個數字 m, 找出第乙個比 m大的迴圈數, 輸出資料保證結果能用乙個無符號長整型數裝下。
輸入包括一行,為整數m(0≤m≤100000000)
輸出包括一行,為第乙個比m大的迴圈數。
樣例輸入
81361
樣例輸出
解答:純粹是想到哪寫到哪。
給個數就存個數(無符號長整型)
不能有0就檢查0
不能重複就檢查重複(用的泛型演算法,好懶……)
然後把數字的每一位存到乙個雙端佇列裡(因為一開始忘了vector也能push_front,就用了deque)
從第0個元素開始移動,到乙個位置就把這個位置置0.
如果當前位置是0,就失敗(就是到了重複的位置)
如果最後一次之後,個個位數的和不是0,就失敗(說明有的哪位沒有走到,求和還是用的泛型演算法……)
最後一次計算完下標後,如果下標不是0,說明跑偏了,也失敗
都通過了,才成功
1 #include 2 #include 3 #include 4 #include 5using
namespace
std;
67 unsigned long nextxhs(unsigned long
n) 21 de.push_front(m % 10
);22 m /= 10;23
}24int index = 0;25
for (auto i = 0; i < de.size() + 1; i++)
2636
if (de[index] == 0)37
41int tmp =de[index];
42 de[index] = 0
;43 index = (index + tmp) %de.size();44}
45}46return
n;47}48
intmain()
54 }
leetCode刷題筆記 2017 03 30
50.pow x,n 這道題要用遞迴,但是遞迴不能用乙個個減,因為這樣要是碰到很大的n的情況會有stack overflow error。所以要利用平方,一次變成n 2。public class solution double powv mypow x,n 2 if n 2 0 else else ...
每日程式設計 (三十)
題目描述 給定 pushed 和 popped 兩個序列,只有當它們可能是在最初空棧上進行的推入 push 和彈出 pop 操作序列的結果時,返回 true 否則,返回 false 示例 1 輸入 pushed 1,2,3,4,5 popped 4,5,3,2,1 輸出 true 解釋 我們可以按以...
每日程式設計 31
題目描述 有n個房間,現在i號房間裡的人需要被重新分配,分配的規則是這樣的 先讓i號房間裡的人全都出來,接下來按照 i 1,i 2,i 3,的順序依此往這些房間裡放乙個人,n號房間的的下乙個房間是1號房間,直到所有的人都被重新分配。現在告訴你分配完後每個房間的人數以及最後乙個人被分配的房間號x,你需...