目錄
#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;
}