#4681: 幫忙看一下


YUYU7788 (YUYU)

學校 : 國立臺灣科技大學
編號 : 13516
來源 : [218.173.130.147]
最後登入時間 :
2010-12-22 23:27:16
c039. 00100 - The 3n + 1 problem -- UVa100 | From: [218.173.130.147] | 發表日期 : 2010-12-22 23:29

#include <cstdlib>
#include <iostream>

using namespace std;

int A(int,int);

int main()
{
    int a,b;
    while(cin >> a >> b)
    {
     if(b>a)
     cout << A(a,b);
     else
     cout << A(b,a);
    }
    return 0;
}

int A(int a,int b)
{
    int i,c,max=0;
    for(i=a;i<=b;i++)
    {
     c=1;     
     while(i>1)
     {
     if(i%2==1)
     {
      i=3*i+1;
      c++;
     }
     else
     {
      i=i/2;
      c++;
     }
     }
     if(c>max)
     max=c;
    }
    return max;
}

沒加入for迴圈時是對的

加入for就錯了

幫忙看一下

3Q

 
#5012: Re:幫忙看一下


u731201 (d)

學校 : 不指定學校
編號 : 18351
來源 : [140.115.236.24]
最後登入時間 :
2011-09-12 16:00:19
c039. 00100 - The 3n + 1 problem -- UVa100 | From: [61.230.222.78] | 發表日期 : 2011-03-29 13:45

#include
#include

using namespace std;

int A(int,int);

int main()
{
    int a,b;
    while(cin >> a >> b)
    {
     if(b>a)
     cout << A(a,b);
     else
     cout << A(b,a);
    }
    return 0;
}

int A(int a,int b)
{
    int i,c,max=0;
    for(i=a;i<=b;i++)
    {
     c=1;     
     while(i>1)
     {
     if(i%2==1)
     {
      i=3*i+1;
      c++;
     }
     else
     {
      i=i/2;
      c++;
     }
     }
     if(c>max)
     max=c;
    }
    return max;
}

沒加入for迴圈時是對的

加入for就錯了

幫忙看一下

3Q

例如你輸入 10 20

處理10時 進入while迴圈後   i 依序為 10 5 16 8 4 2 1

 i=1跳出 while迴圈 i++, i變成2 回到for迴圈後 就一直處理 2了

 等同於你只處理了第一個數值和2而已

 
ZeroJudge Forum