CCF——跳一跳
个人看法:输入0代表结束,那么可以考虑用一个数组来进行接收数值,然后再计算总的得分。而且当得到1分时,总分计算只加1。而2的话,通过上述样例,可以显然看出规律就是有多少个连续的2,那么获得的分数为weight+=2*x,其中x代表有多少个2,然后x递减到0为止。
#include <iostream>
using namespace std;
int jump(int id);
int main()
{
size_t a[100] = {};
size_t i = 0;
size_t sum = 0;
size_t id = 0;
size_t weight = 0;
size_t k = 0;
for (;i!=100;++i)
{
cin >> a[i];
if (a[i] == 0)
{
break;
}
}
for (size_t j=0;j!=i;++j)
{
if (a[j]==1)
{
weight = 1;
sum += a[j];
}
else
{
for (k = j;k!=i+1; ++k)
{
if (a[j]==a[k])
{
++id;
}
else
{
weight = jump(id);
sum += weight;
j = k - 1;
id = 0;
break;
}
}
}
}
cout << sum << endl;
return 0;
}
int jump(int id)
{
size_t sum = 0;
for (;id!=0;--id)
{
sum += 2 * id;
}
return sum;
}
当然如果不想用数组,还可以这样写
#include <iostream>
using namespace std;
int main()
{
int x;
int sum = 0;
int weight = 0;
while ((cin >> x) && x!=0)
{
if (x == 1)
weight = 1;
else if (x == 2)
{
if (weight == 1)//若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,
weight = 2;
else //否则此次得分比上一次得分多两分
weight += 2;
}
sum += weight;
}
cout << sum << endl;
return 0;
}