CCF——跳一跳

版权声明:就算是个菜鸟,我也有版权 https://blog.csdn.net/qq_33248019/article/details/88826852

在这里插入图片描述
个人看法:输入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;
}

猜你喜欢

转载自blog.csdn.net/qq_33248019/article/details/88826852