關於部落格
聊盡天南地北,無所不聊
  • 59214

    累積人氣

  • 6

    今日人氣

    2

    追蹤人氣

ACM 100

/* 問題簡述:用下列的演算法 /* 1. input n */ /* 2. print n */ /* 3. if n = 1 then STOP */ /* 4. if n is odd then n < ---3n+1 */ /* 5. else n<---n/2 */ /* 6. GOTO 2 */ /* 輸入22他會跑出,22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 */ /* 則有16個數字,現在輸入i跟j,將介於i跟j裡經過這種演算法 */ /* 有最多數字的次數印出(也包括i跟j) */ /* 輸入檔案:整數i跟j */ /* 輸出檔案: 整數i跟j 跟最多數字次數 */ /*************************************************************************/ #include<stdio.h> int main() { int a,b,change;      //設整數i,b,change int i,j,c=1,save=0;      //設整數i,j,c=1,save=0 while (scanf("%d%d",&a,&b)!=EOF)      //輸入a 跟b { if ((a>0 && a<1000000)&&(b>0 && b<1000000))      //如果a,b大於0跟a,b小於1000000 { printf("%d %d ",a,b);      //印出a,b if (a>b)      //如果a大於b做調換 { change=a; a=b; b=change; } for (i=a;i< =b;i++)       //執行a到b之間的數字 { j=i;      //設j等於i while (j!=1) { if (j%2==0)      //判斷是否為偶數 { j=j/2;      //是偶數除以2 c++;      //c加1 } else { j=j*3+1;      //j是奇數 j=3*j+1 c++;      //c加1 } } if (a==1&&b==1)      //如果a==1而且b==1 { c=1;      //c只會是1 } if (c>save)save=c;      //儲存最大值 c=1; } printf("%dn",save); save=0; } } return 0; } /************************************************************/ /* 解題想法(演算法): 一開始要判定是否為奇數或偶數,(j%2==0)為偶數,如果是偶數j=j/2, 如果不是則j=j*3+1,直到j=1為止,每做一次j=j/2或是j=j*3+1則c就會加1(當成計數器), save為儲存器,判斷c是否大於save,如果大於save則對調。 */ /************************************************************/ /* 測試項目: */ /* 1. 輸入:1 10 輸出:1 10 20 */ /* 1. 輸入:100 200 輸出: 100 200 125 */ /* 1. 輸入:900 1000 輸出: 174 */ /************************************************************/
相簿設定
標籤設定
相簿狀態