|
Post by huangno1 on Feb 24, 2017 8:28:36 GMT -8
程式說明
UVa 是一個很有名的線上程式題庫,它的天字第一題,3n+1,是這麼問的:
輸入一個正整數值 n,反覆執行以下動作,直到它變成 1。
(1) 如果數值 n 是奇數,把它變成 3n+1
(2) 如果數值 n 是偶數,把它變成 n/2
舉例來說,若輸入 n = 22,則 n 的值會這樣變化:
22 -> 11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
從頭到尾共經歷了 16 個值(包含一開始的值和 1),我們把這個值 16 稱為 22 的循環長度。
現在,請你寫一個程式,當輸入正整數 a 和 b 時,輸出介於 a 和 b之間(包含 a, b)所有數的最大循環長度。(假設這個範圍內所有數的循環長度都不會是無限大。)
輸入範例一
1 10
輸出範例一
20
輸入範例二
100 200
輸出範例二
125
***以下為參考程式***(注意!!複製貼上此程式碼,將對你沒好處)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 0 , b = 0 , n = 0 , t = 1 , ans = 0 ;
scanf( "%d %d" , &a , &b );
if( a > b )
{
n = b ;
b = a ;
a = n ;
}
for ( int i = a ; i <= b ; i++ )
{
n = i ;
while ( n != 1 )
{
if( n % 2 == 1)
n = 3 * n + 1 ;
else
n = n / 2 ;
t++;
}
if ( t > ans )
ans = t ;
t = 1 ;
}
printf ( "%d" , ans );
return 0;
}
|
|