cpe練習筆記 UVa100 The 3n + 1 problem




原文題目


題目大意
根據給予的演算法找出輸入兩數之間最大的執行次數

題目演算法
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

程式碼

#include <stdlib.h>
#include <stdio.h>

int alg(int input);

int main(){
int i,j,k,datas[2];
int max=0,tmp;
 i=0;
 while(scanf("%d",&datas[i])!=EOF){
  printf("%d ",datas[i]);
  if(i){
   //防止逆迴圈
   if(datas[0]>datas[1]){
    tmp=datas[0];datas[0]=datas[1];datas[1]=tmp; 
   }
   
   //防止範圍相等
   if(datas[0]==datas[1])
    max=alg(datas[0]);
   
   //正常情況
   for(j=datas[0],k=0;j<datas[1];j++,k++){
    tmp=alg(j);//計算執行次數
    if(tmp>max)//找範圍內最大
     max=tmp;
   }
  }
  i++;
  //一列結束 資料初始化
  if(i>1){
   i=0;
   printf("%dn",max);
   max=0;
  }
 }
}

//題目演算法
int alg(int n){
 int counter=1;
 while(n!=1){
  if(n%2==1)
   n=3*n+1;
  else
   n=n/2;
  counter++;
 }
return counter;
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料