华为机试—删除连续出现大于等于3的数字

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:59   2363   0
输入一组数字(最多15个),去掉连续次数大于等于三的数字,如果去掉后仍有连续次数大于等于三的,继续进行同样的处理,直到结果中没有出现连续次数大于等于三的数字为止。
如果最终全部消除完了 输出“none”


输入:1 1 1 1 2 2 2 1 3 3 3 3 1 1 1

输出:none


#include <iostream>
#include <vector>
using namespace std;

int kk=1;

void delete_num(vector<int> a)
{
 int len = a.size();

 int i,j;
 int flag=0;

 for(i=0;i<len;i++)
 {
  int k=i;
  for(j=k+1;j<len;)
  {
   if(a[k]==a[j]) j++;
   else
   {
    if(j-k>=3)
    {
     a.erase(a.begin()+k,a.begin()+j);
     flag=1;
     break;
    }
    else
    {
     k=j;
     j=k+1;
    }
   }
  }
  if(flag)
   break;
  if(j-k>=3){
   a.erase(a.begin()+k,a.begin()+j);
   break;
  }
 }

 cout<<"第"<<kk<<"次除重: ";
 for(i=0;i<a.size();i++)
  cout<<a[i]<<" ";
 cout<<endl;

 if(a.size()==len){
  cout<<"最后结果: ";
  for(i=0;i<a.size();i++)
   cout<<a[i]<<" ";
 }
 else{
  if(a.size()!=0){
   kk++;
   delete_num(a);
  }
  else
   cout<<"最后结果: none"<<endl;
 }

}

void main()
{
 int n;
 vector<int> a;
 cin>>n;
 while(getchar()!='\n')
 {
  a.push_back(n);
  cin>>n;
 }
 a.push_back(n);
 
 delete_num(a);
 cout<<endl;
}

测试结果:


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP