求助.jpg
查看原帖
求助.jpg
487367
mc_city楼主2021/9/6 20:58

问一下,做这个题的时候每一次都会有一个点现实读到':',但却应该是2。 以下我的代码:

#include<iostream>
#include<cstring>
using namespace std;
string ipv6,ipv6z[9]={};
int ipv6zn=0;
int main()
{
	cin>>ipv6;
	bool l0=0;
	for(int i=0;i<8;i++)
	{
		ipv6z[i]="0";
	}
	for(int i=0;i<ipv6.length();i++)
	{
		if(ipv6[i]!=':'&&ipv6[i]!='0')
		{
			l0=1;
		}
		else if(ipv6[i]==':')
		{
			l0=0;
			ipv6zn++;
		}
		if(l0&&ipv6z[ipv6zn]=="0")
		{
			ipv6z[ipv6zn][0]=ipv6[i];
		}
		else if(l0)
		{
			ipv6z[ipv6zn]+=ipv6[i];
		}
	}
	int f=0,d=0,l=0,mf=8,ml=0;
	for(int i=0;i<=8;i++)
	{
		if(ipv6z[i]=="0")
		{
			if(i<=mf)
			{
				mf=i;
			}
			ml++;
		}
		else
		{
			if(ml>l)
			{
				d=i-1;
				f=mf;
				l=ml;
			}
			ml=0;
			mf=8;
		}
	}
	bool dom=1;
	for(int i=0;i<8;i++)
	{
		if(i>=f&&i<=d&&dom)
		{
			if(f==0)
			{
				cout<<"::";
			}
			else
			{
				cout<<':';
			}
			dom=0;
		}
		else if(i<f||i>d)
		{
			cout<<ipv6z[i];
			if(i!=7)
			{
				cout<<':';
			}
		}
	}
}

另外,这个题测试点好像是随机生成的,我同一个代码连续提交两遍后WA的点不同。

2021/9/6 20:58
加载中...