1. 程式人生 > >青蛙過河

青蛙過河

Problem Description
1)一條小溪尺寸不大,青蛙可以從左岸跳到右岸,在左岸有一石柱L,石柱L面積只容得下一隻青蛙落腳,同樣右岸也有一石柱R,石柱R面積也只容得下一隻青蛙落腳。 2)有一隊青蛙從小到大編號:1,2,…,n。 3)初始時:青蛙只能趴在左岸的石頭 L 上,按編號一個落一個,小的落在大的上面-----不允許大的在小的上面。 4)在小溪中有S個石柱、有y片荷葉。 5)規定:溪中的每個石柱上如果有多隻青蛙也是大在下、小在上,每個荷葉只允許一隻青蛙落腳。 6)對於右岸的石柱R,與左岸的石柱L一樣允許多個青蛙落腳,但須一個落一個,小的在上,大的在下。 7)當青蛙從左岸的L上跳走後就不允許再跳回來;同樣,從左岸L上跳至右岸R,或從溪中荷葉、溪中石柱跳至右岸R上的青蛙也不允許再離開。 問題:在已知小溪中有 s 根石柱和 y 片荷葉的情況下,最多能跳過多少隻青蛙?
Input
輸入資料有多組,每組佔一行,每行包含2個數s(s是小溪中的石柱數目)、y(y是小溪中的荷葉數目)。(0 <= s <= 10,0 <= y <= 10),輸入檔案直到EOF為止!
Output
對每組輸入,輸出有一行,輸出最多能跳過的青蛙數目。
Sample Input
0 2
1 2
Sample Output
3
6
Hint

Source
zlh

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int f(int s,int y)
{
    int re;
    if(s==0)
    {
        re=y+1;
    }
    else
    {
        re=2*f(s-1,y);
    }
    return re;
}
int main()
{
    int s,y,re;
    while(~scanf("%d%d",&s,&y))
    {
        re=f(s,y);
        printf("%d\n",re);
    }
}