2012年1月22日 星期日

d658: 11636 - Hello World!

內容 :
    當你剛學程式印出「Hello World!」時,你總是很高興因為你還不曉得以後還會碰到多難多複雜的程式和演算法。現在,假設你還不知道迴圈,要印出7行的「Hello World!」,你只好使出最後的絕招──複製、然後貼上。如果你夠聰明的話,你知道輸出7行的「Hello World!」只要複製貼上3次就夠了。 如圖1所示,當我們複製1行「Hello World!」然後貼上你可以得到2行「Hello World!」,當你複製這2行然後再次貼上可以得到4行,最後再複製3行貼上就可以得到上述輸出7行的答案(圖4)。所以複製貼上3次就是我們想要的答案。 現在要你輸出若干行的「Hello World!」,請回答出最少要複製貼上幾次才能達到你要的數量。當然,你複製貼上的「Hello World!」不能被刪除掉。


Figure 1
Figure 2
Figure3
Figure 4



輸入說明 :
    有若干行輸入測資,每行包括一個正整數N(0 < n < 10001)代表要印出的「hello world!」數量。當n為負數時代表輸入結束,這行不用做處理。

輸出說明 :
    對於每行測資請輸出一行,格式為「Case X: Y」,X代表第幾筆測資,Y代表最少要複製貼上的次數。

範例輸入 :
2
10
-1

範例輸出 :
Case 1: 1
Case 2: 4

出處 :
    UVa 11636

程式碼 :

#include<stdio.h>

int main()
{
    int n,i,judge,count=0,arr[17]={1};
    for(i=1;i<17;i++)
        arr[i] = arr[i-1]*2;
    while(scanf("%d",&n)==1)
    {
        if(n<0)
            break;
        for(i=0;n>arr[i];i++);
        printf("Case %d: %d\n",++count,i);
    }
    return 0;
}




http://zerojudge.tw/ShowProblem?problemid=d658

沒有留言:

張貼留言