跳一跳

题目:

跳一跳是一款微信小游戏,游戏规则非常简单,只需玩家要从一个方块跳到下一个方块,如果未能成功跳到下一个方块则游戏结束。

计分规则如下:

1. 如果成功跳到下一个方块上,但未跳到方块中心,加1分

2. 如果成功跳到下一个方块上,且刚好跳到方块中心,则第一次加2分,此后连续跳到中心时每次递增2分。也就是说,第一次跳到方块中心加2分,连续第二次跳到方块中心加4分,连续第三次跳到方块中心加6分,…,以此类推。

3. 如果未能成功跳到方块上,加0分,且游戏结束

现在给出玩家一局游戏的每次跳跃情况,请计算玩家最终得分。

输入说明

输入为若干个非零整数(整数个数小于1000),表示玩家每次的跳跃情况。整数之间用空格分隔,整数取值为0,1,2。0 表示未能成功跳到下一个方块上,1 表示成功跳到下一个方块上但未跳到方块中心,2 表示成功跳到下一个方块上,且刚好跳到方块中心。输入的数据只有最后一个整数是0,其均非零。

输出说明
输出一个整数表示该玩家的最终得分。

输入样例
1 1 2 1 2 2 2 0

输出样例
17

题目分析:

经过读题,我们可以总结出如下要点:

1.“输入若干个整数”中这个“若干”怎么刻画——解决办法是定义数组以后,用0作为循环终止的条件;

2.积分规则2中说连续跳到中心时,所加的分数会等差递增——这是本题的核心难点,我们利用循环来解决。

 

分部码字:

第一步 定义数组,让用户可以从键盘输入

  

int step[1000],i;
int score=0;
for(i=0 ; i<1000 ; i++)
{
  scanf(“%d”,&step[i]);
  if(step[i]==0)    //当用户输入0时,进入该判断分支,break跳出循环,输入完毕
  {  
    break;
  }
}

第二步 从数组的第一个数字开始,只要没有取到0,说明跳一跳所走的这一步一定会给总分加分,首先外层写好循环

for(i=0 ; step[i]!=0 ; i++)

{

}

第三步 第一个分支:若该数组变量为1,说明符合积分规则1,总分加1分

if(step[i]==1)
{
  score += 1;
}

第四步 第二个分支:若该数组变量为2,说明符合积分规则2

这里很特殊。规则规定:连续第一次跳在中心(用户输入2)得2分,第二次得4分,以此类推。转变说法,即:当前step之前用户输入了‘多少’个连续的‘2’,就加(‘多少’+1)*2的分数。现在,我们要将这个‘多少‘计数出来,即引入count,利用循环,得到该step前有多少个2。

if(step[i]==2)
{
  int count=0,j;
  for(j=i;step[j]==2;j–)    //从该step向之前计数,遇到1时停止计数
  {
    count++;
  }
  score += 2 * count;

}

第五步 打印分数即可

第六步 整合代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int step[1000],i;
 5     int score=0;
 6     for(i=0 ; i<1000 ; i++)
 7     {
 8         scanf("%d",&step[i]);
 9         if(step[i]==0)
10         {
11             break;
12         }
13     }
14     for(i=0 ; step[i]!=0 ; i++)
15     {
16         if(step[i]==1)
17         {
18             score += 1;
19         }
20         if(step[i]==2)
21         {
22             int count=0,j;
23             for(j=i;step[j]==2;j--)
24             {
25                 count++;
26             }
27             score += 2 * count;
28         }
29     }
30     printf("%d",score);
31     return 0;
32 }
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 跳一跳