哪位大佬帮忙看看我这哪里错了,我觉得自己的思路应该没问题啊
查看原帖
哪位大佬帮忙看看我这哪里错了,我觉得自己的思路应该没问题啊
363096
封禁用户楼主2021/10/24 17:56
#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;
		}
	}
	return 0;
}
思路:运用结构体,储存每个水果的编号和种类,通过while中的第一个for循环第一次挑水果,并用数组b记下被挑出的水果的编号;第二个for循环为将a数组的原副本c数组赋值到a数组中,其中跳过数组b记下的编号以达到去除被挑走水果的目的,然后重复循环。当num为1时说明只挑了一次水果,表明已经到达最后,此时就结束while循环。
2021/10/24 17:56
加载中...