跳一跳
题目:
跳一跳是一款微信小游戏,游戏规则非常简单,只需玩家要从一个方块跳到下一个方块,如果未能成功跳到下一个方块则游戏结束。
计分规则如下:
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 }