1129 零起點學演算法36 3n 1問題

2022-08-09 08:45:08 字數 1523 閱讀 9847

time limit: 1 sec  memory limit: 64 mb   64bit io format: %lld

submitted: 4541  accepted: 1235

[submit][status][web board]

任給乙個正整數n,如果n為偶數,就將它變為n/2,如果為奇數,則將它乘3加1(即3n+1)。不斷重複這樣的運算,經過有限步後,一定可以得到1 。

輸入1個正整數n(n <= 10^10)(多組資料)

輸出變化的次數(每組資料一行)

3

7

使用 while 迴圈

使用 while 語句在條件成立時重複某動作,類似於 if 語句,只要條件為 true

就重複動作。

while 迴圈計算乙個表示式的值,如果表示式為

true,則會執行迴圈體中的**。如果條件計算結果為 true,在迴圈返回以再次計算條件前執行一條語句或一系列語句。條件計算結果為 false

後,則跳過語句或一系列語句並結束迴圈。在不確定要將乙個**塊迴圈多少次時,使用 while 迴圈可能會非常有用。

例如,下面的**將數字顯示到"輸出"面板中:

var

i:number = 0;

while (i < 5)

您會看到以下數字顯示到"輸出"面板中:

0 1

2 3

4 使用 while 迴圈而非 for 迴圈的乙個缺點是,在 while

迴圈中更有可能編寫出無限迴圈。如果遺漏遞增計數器變數的表示式,則 for 迴圈示例**將無法編譯;而 while 迴圈示例**將能夠編譯。若沒有遞增 i

的表示式,迴圈將成為無限迴圈。

零起點學演算法

1 #include2

intmain()

10else13}

14 printf("

%lld\n

",cout);15}

16return0;

17 }

此題有陷阱。 首先n的範圍是10的10次冪。

unsigned   int   0~4294967295   

int   2147483648~2147483647 

unsigned long 0~4294967295

long   2147483648~2147483647

long long的最大值:9223372036854775807

long long的最小值:-9223372036854775808

unsigned long long的最大值:1844674407370955161

__int64的最大值:9223372036854775807

__int64的最小值:-9223372036854775808

unsigned __int64的最大值:18446744073709551615

數值太大 用long long 輸入 lld輸出

1129 零起點學演算法36 3n 1問題

任給乙個正整數n,如果n為偶數,就將它變為n 2,如果為奇數,則將它乘3加1 即3n 1 不斷重複這樣的運算,經過有限步後,一定可以得到1 input 輸入1個正整數n n 10 10 多組資料 output 輸出變化的次數 每組資料一行 sample input 3sample output 7 ...

零起點學演算法68 刪除字元

include include include int main printf n memset str,0,sizeof str getchar 不寫會出錯 return 0 這是乙個非常水的題,主要想講一下gets 讀取的換行符會被轉化成 0 來結束字串的讀入。但是gets之後,再次讀取乙個字元...

零起點學演算法104 第幾天?

time limit 1 sec memory limit 128 mb 64bit io format lld 給定乙個日期,輸出這個日期是該年的第幾天。輸入資料有多組,每組佔一行,資料格式為yyyy mm dd組成,具體參見sample input 另外,可以向你確保所有的輸入資料是合法的。對於...