UVA11549計算器謎題

2021-06-27 22:49:08 字數 849 閱讀 6596

題意:

有乙個計算機只能保留數字的前n位,你有乙個數字k(k<=9),反覆平方後在計算機上顯示的最大數字是多少。

思路:顯然這個題目是有迴圈節的,為什麼有迴圈節?首先我們看下k<=9那麼也就是說所有的答案都是9位數之內的,也就是說才幾億唄,最慢幾億次之後必然迴圈啊,這樣我們就可以不停得列舉,然後碰到迴圈節的時候就不列舉了,怎麼樣找迴圈節,一開始想的是只記錄第乙個,然後等第乙個再次出現的時候就直接break結果果斷錯了,他有可能是類似這樣的迴圈節1 2 3 4 5 4 5 4 5.....迴圈節是4 5,這種的,所以第一種方法失敗了,但是我們可以用最笨的方法去記錄,就是開乙個容器,我開的是map,記錄每個數字是否出現過,提交之後雖然ac了但感覺容器挺耗時的,然後又寫了個書上說的那個floyd判圈,結果果然快了很多,一下是兩種方法的**。

floyd判圈

#include

int mk[15];

void inint()

long long next(int n ,int a)

int main ()

while(k1 != k2);

printf("%d\n" ,ans);

}return 0;

}map判斷是否出現過

#include

#include

using namespace std;

int mk[15];

mapmark;

void inint()

long long next(int n ,int a)

int main ()

printf("%d\n" ,ans);

}return 0;

}

UVA 11549(計算器謎題)

題意 有個老式計算器,只能顯示n位數字。現在輸入乙個整數k,然後反覆平方,一直做下去,能得到的最大數是多少。例如,n 1,k 6,那麼一次顯示 6,3,9,1 演算法 floyd判圈演算法 ac include include include using namespace std int fun ...

UVA 11549 計算器謎題(floyd判圈)

題目 可以想成兩個小孩,乙個小孩去追另乙個小孩,這個小孩是那個小孩的幾倍速度都沒有關係,若跑著跑著突然出現了乙個迴圈圈,那麼快的小孩一定可以套慢的小孩的圈,直到某一刻追上。此方法可以省去stl中的set,使得空間開銷變小。includeusing namespace std int buf 100 ...

實現計算器

dim boldot as boolean dim dblacc1,dblacc2 as double dim dblacc3 as double 10 dim strop as string private sub add num byval intnumber as integer if bol...