题目:
计分规则如下:
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 score=0;
for(i=0 ; i<1000 ; i++
{
scanf("%d",&step[i];
if(step[i]==0 //当用户输入0时,进入该判断分支,break跳出循环,输入完毕
{
break;
}
}
第二步 从数组的第一个数字开始,只要没有取到0,说明跳一跳所走的这一步一定会给总分加分,首先外层写好循环
{
第三步 第一个分支:若该数组变量为1,说明符合积分规则1,总分加1分
if(step[i]==1
{
score += 1;
}
第四步 第二个分支:若该数组变量为2,说明符合积分规则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]==010 {11 break;12 }13 }14 for(i=0 ; step[i]!=0 ; i++15 {16 if(step[i]==117 {18 score += 1;19 }20 if(step[i]==221 {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 }