穿越丛林 选择结构与循环结构

穿越丛林

Problem Description
ljj是一位富有冒险心又很喜欢研究数学的孩纸,有一天,他到一个丛林冒险,这里的树长有像0、4、6、8、9这样形状的洞,他要想穿过丛林,必须从这些树洞里钻过去。这时他忽然萌生了一个特别的想法,统计穿越丛林道路的条数!现在他已经知道了要经过丛林道路所经过的n棵树的顺序,以及与每棵上的树洞的形状的数字。
Input
文件第一行一个整数n,表示丛林中有洞的数的棵数。
接下来一行有n个被空格隔开的数t[i],表示第i棵树长得像的数字。
Output
输出只有一行,为路径条数。
Sample Input
5
0 0 0 6 8
Sample Output
2
Tip
最后一棵树的树洞长得像8,表示两个树洞,有以下两条路径可以穿越丛林,见下图:在这里插入图片描述
Data Constraint
30%的数据,1<=n<=50
60%的数据,1<=n<=500
90%的数据,1<=n<=5000
100%的数据,1<=n<=50000
其中:t[i]∈(0,4,6,8,9),即t[i]属于(0,4,6,8,9)中的某个数。

观察本题,很容易可以知道,我们只需要数有多少个8,对于i个8,答案就是2i
因此,我们得到如下代码。

#include <cstdio>
  
int n,tail,a;
int x[50001];
  
int main()
{
    scanf("%d\n",&n);
    x[++tail]=1;
    while (n--)
    {
        char c=getchar();
        if (c==' ')
            c=getchar();
        if (c=='8')
            for (int i=1;i<=tail;i++)
            {
                x[i]<<=1;
                x[i]+=x[i-1]/10;
                x[i-1]%=10;
            }
        if (x[tail]>=10)
            x[tail+1]=x[tail]/10,x[tail]%=10,tail++;
    }
    for (int i=tail;i;i--)
        printf("%d",x[i]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/CutieDeng/article/details/82860250