ccf 201803-1 跳一跳 201803-2 碰撞的小球 AC代码 C++

目录

跳一跳AC代码

 

碰撞的小球

思路

AC代码


#include<iostream>
#include <cstdio>
using namespace std;
int main()
{
	int num;
	int sum=0;
	int temp;
	while(~scanf("%d",&num)&&num!=0)
	{
		if(num==1)
		{
			temp=1;
			sum+=1;
		}
		else if (num==2)
		{
			sum+= 2*temp;
			temp++;
		}
	}
	cout<<sum<<endl;
	return 0;
}

 

 

碰撞的小球

  • 碰撞的小球思路

题目理解:结果是求t秒之后的位置,那么正常情况下就是每个球t秒后的位置,其中附加条件球会碰撞速度不变的向相反的方向走,且碰撞的球的个数都是偶数个,所以只需要球两两判断就可以了(注意:当球到达端点的时候会方向相反)。

(1)因为他们的碰撞只在整数的位置,所以只需要按每秒一个单位的速度向一个方向行走。当球到达L或者顶点的时候,改变方向。

(2)碰撞条件:当两个球位置相同,方向相反的时候会发生碰撞。(注:碰撞的时候方向改变。 )

  • 碰撞的小球AC代码

#include<iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
	int n,L,t;
	int p[105];//位置 
	int f[105];//方向 
	cin>>n>>L>>t;
	memset(p,0,sizeof(p));
	memset(f,0,sizeof(f));//规定L方向为0,原点方向为1.
	for(int i=0;i<n;i++)
	{
		cin>>p[i];		
	} 
	for(int i=1;i<=t;i++)//时间 
	{
		for(int j=0;j<n;j++)//球 
		{
			if(f[j]==0)//往L走 
			{
				p[j]+=1;
				if(p[j]==L||p[j]==0)
					f[j]=~f[j];
			}				
			else//往0走 
			{
				p[j]-=1;
				if(p[j]==L||p[j]==0)
					f[j]=~f[j];
			} 			
		}
		for(int j=0;j<n;j++)
		{
			for(int k=j;k<n;k++)
			{
				if(p[j]==p[k]&&f[j]!=f[k])
				{
					f[j]=~f[j];						
					f[k]=~f[k];
				}
			}
		}
	}
	for(int i=0;i<n;i++)
	{
		cout<<p[i]<<" ";
	 } 
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章