#include<bits/stdc++.h>
using namespace std;
struct ftuit
{
int id,kind;
}a[200001],c[200001];
int main()
{
bool l=1;
int n,num,b[200001],m=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i].kind ;
a[i].id =i+1;
}
for(int i=0;i<n;i++)
{
c[i].id =a[i].id ;
c[i].kind =a[i].kind ;
}
while(l==1)
{
num=0;
for(int i=0;i<n;i++)
{
if(a[i].kind ==a[i+1].kind)
{
if(i==0)
{
cout<<a[i].id <<" ";
b[num]=i;
num++;
}
if(i!=0&&a[i].kind!=a[i-1].kind)
{
cout<<a[i].id<<" ";
b[num]=i;
num++;
}
}
if(a[i].kind!=a[i-1].kind&&a[i].kind!=a[i+1].kind)
{
cout<<a[i].id<<" ";
b[num]=i;
num++;
}
}
cout<<endl;
for(int i=0;i<n;i++)
{
if(i!=b[i])
{
a[m].id =c[i].id ;
a[m].kind =c[i].kind ;
m++;
}
}
if(num==1)
{
l=0;
}
n-=num;
}
return 0;
}
思路:运用结构体,储存每个水果的编号和种类,通过while中的第一个for循环第一次挑水果,并用数组b记下被挑出的水果的编号;第二个for循环为将a数组的原副本c数组赋值到a数组中,其中跳过数组b记下的编号以达到去除被挑走水果的目的,然后重复循环。当num为1时说明只挑了一次水果,表明已经到达最后,此时就结束while循环。