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;
}

 

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