2008年8月2日 星期六

Q10696: f91


題目:http://luckycat.kshs.kh.edu.tw/homework/q10696.htm


出處 :
ACM



McCarthy是一個有名的資訊專家。他定義了一個遞迴的函數叫做 f91 。它輸入一個正整數N並且依據以下的規則傳回一個正整數:



  • 如果 N <= 100, 那麼 f91(N) = f91( f91( N+11) )
  • 如果 N >= 101, 那麼 f91(N) = N-10


請你寫一個程式來計算 f91


首先,我用手算了很久,得到一個結論:這不是給人算的!

題目的意思應該是讓我們利用遞迴函數讓電腦算

結果,意外的簡單,第一次就獲得AC (Accepted)




方法很簡單,跟隨題目製作一個f91函數就可以順利完成了:

/*
Name: Q10696 f91
Author: yi_lin
Language: C programmer
Date: 28/07/08 23:17
*/

#include <stdio.h>

int f91(int a)
{
int b;
if(a<=100) b=f91(f91(a+11));
else if(a>=101) b=a-10;

return b ;
}

int main()
{
int N,t;
while(1){
scanf("%d",&N);
if(N==0) break;
t=f91(N);

printf("f91(%d) = %d\n",N,t);

}
return 0;

}


不過,使用遞迴函數會大幅的降低執行效率