• 跳一跳


    题目:

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

    计分规则如下:

    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
     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 }
    复制代码

     

  • 相关阅读:
    Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务
    【Linux】如何在进程间加锁(实现互斥)
    数字化报修管理系统有什么用?如何提升物业报修效率?
    c语言上机作业:迭代法求平方根
    什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?
    Spring核心——SPEL概述
    带您聚焦第十四届中国航展新看点
    微信小程序formdata格式请求
    【JS】Chapter13-构造函数&数据常用函数
    java计算机毕业设计冠军体育用品购物网站MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://www.cnblogs.com/liuyipudeboke/p/16886112.html