CCF 20180302小球碰撞

#include<bits/stdc++.h>
using namespace std;
/*
1.首先进行排序 (结构体数组的排序) 
2.结果的输出:不是根据change[i].id 的1-n的输出,而是根据其下边的1-n来输出 
*/
struct node
{
int id;//排序后的下标 
int no;//1标记正方向,0标记负方向 
int num;
}change[102];
int main()
{
int n,L,t,arr[102],flag=0,temp=-1;
cin>>n>>L>>t;
//数据输入 
for(int i=1;i<=n;i++)
{
cin>>arr[i];
change[i].id=i;
change[i].num=arr[i];
if(arr[i]==L)
change[i].no=0;
else
change[i].no=1;
}
   //结构体数组排序排序
   for(int i=1;i<n;i++)
   {
    node t1;
    for(int j=i;j<=n;j++)
    {
       if(change[i].num>change[j].num)
    {
    t1=change[i];
    change[i]=change[j];
    change[j]=t1;
    }
    }
   } 
//操作
for(int i=1;i<=t;i++)
{
for(int j=1;j<=n;j++)
{   
if(arr[j]==L)
{
change[j].no=0;
change[j].num-=1;
}
else if(arr[j]==0)
{
change[j].no=1;
change[j].num+=1;
}
else
{
for(int k=1;k<=n;k++)
{
 if(arr[j]!=arr[k]&&j!=k) flag=1; 
 else if(arr[j]==arr[k]&&j!=k)
 {
   flag=0;
   temp=k;
   change[j].no=0;
   break;
 }
}
if(flag==1)
{
if(change[j].no==1) change[j].num+=1;
else if(change[j].no==0) change[j].num-=1;
}
else if(temp>j)
{   
change[j].no=0;
change[j].num-=1;
}
else
{
change[j].no=1;
change[j].num+=1;
}

}
       for(int p=1;p<=n;p++) 
  arr[p]=change[p].num;

//输出
     int p=1; 
     while(p<=n)
     {
     for(int re=1;re<=n;re++)
 {
  if(change[re].id==p)
  {
  cout<<change[re].num<<" ";
  break;
  }
 }
 p++;
     }
}

猜你喜欢

转载自blog.csdn.net/zhaoshuling1109/article/details/79604300