迴圈數 (細節,模擬)

2021-09-28 15:27:21 字數 1142 閱讀 2330

題目描述

迴圈數是那些不包括0這個數字的沒有重複數字的整數 (比如說, 81362) 並且同時具有乙個有趣的性質, 就像這個例子:

如果你從最左邊的數字開始 ( 在這個例子中是8) 數最左邊這個數字個數字到右邊(回到最左邊如果數到了最右邊),你會停止在另乙個新的數字(如果沒有停在乙個不同的數字上,這個數就不是迴圈數). 就像: 8 1 3 6 2 從最左邊接下去數8個數字: 1 3 6 2 8 1 3 6 所以下乙個數字是6.

重複這樣做 (這次從「6」開始數6個數字) 並且你會停止在乙個新的數字上: 2 8 1 3 6 2, 也就是2.

再這樣做 (這次數兩個): 8 1

再一次 (這次乙個): 3

又一次: 6 2 8 這是你回到了起點, 在從每乙個數字開始數1次之後. 如果你在從每乙個數字開始數一次以後沒有回到起點, 你的數字不是乙個迴圈數。

給你乙個數字 m (在1到9位之間), 找出第乙個比 m大的迴圈數, 並且一定能用乙個無符號長整形數裝下

輸入僅僅一行, 包括m

輸出僅僅一行,包括第乙個比m大的迴圈數

樣例輸入

81361
樣例輸出

81362
題意描述,輸入乙個數,找到比這個數大的迴圈數輸出;

滿足上述3個要求的即為迴圈數;

解題思路:先把含有0和重複數字的數字剪掉,再判斷是否為迴圈數,判斷時用死迴圈,每個數字經過一次後標記一下,如果再次經過則表示不是迴圈數,只有每個數字都經過一次,再回到一,才可以通過成為迴圈數;

ac**:

#include#include#includeint main()

m=x;

s=k=(int)log10(m);

while(m!=0)

c[m%10]=1;

m/=10;

}if(find==1)

continue;

i=0;t=1;

while(1)

else if(b[i]==1)

else

}if(find==1)

continue;

else if(find==2)

}} return 0;

}

基礎演算法 模擬 細節

1337 翻轉遊戲 例如 遊戲有兩關一共4盞燈,第一關levs為 第二關為 你需要5步完成這個遊戲,因為燈初始狀態為 5個步驟依次是 check,check。輸入多組測試資料,第一行乙個整數t,表示資料個數,其中1 t 10 之後有t組相同結構的資料 每組資料第一行包含兩個整數n,m,其中1 n,m...

goto模擬迴圈

0為false 1為true for的彙編 for int i 0 i 5 i 00401048 mov dword ptr ebp 4 0 dword ptr 表示i為整型,ebp 4偏移到變數i 0040104f jmp forgoto 2ah 0040105a goto偏移2a位到004010...

迴圈的一些細節

1 迴圈執行次數相同,大迴圈放在外面還是小迴圈放在外層效率高呢?int end1 10 int end2 100 int end3 1000000 long starttime system.nanotime 開始時間 for int i 1 i end3 i long endtime system...