纯作者感想,因为作者很菜,所以这些错误要是都没事非常大的概率能A,否则@一下我。题目中的 a,b,c,d,e 超额,点和冒号不是3个和1个等基础问题这里不再提出,而是提出较容易出错的类型。
1. <类型> 090.01.10.10.10 //注意第一个空格之后有一个前缀0,第二个数字有一个前缀0。
2. <类型> .(此处省略): //概括来说就是点或冒号在两边的情况。
3.
一个服务机是
Server 117.50.48.70:53043.0
客户机是
Client 117.50.48.70:53043
显然前面的5个数字都能对上,但是这个服务机却是不合法的,所以不行,但是您的代码可能输出其它的错误答案。
4. 两个点在一起的情况。如:<类型> 1..1.1:1 //虽然符号的数量符合但是仍然错误,需要判一下
这里附上我的非常好理解的代码。还有我的找不同程序。这个程序可以帮助您对一下哪个地方和数据输出不同,建议配合fc一起使用。
已A
#include<bits/stdc++.h>
using namespace std;
int n;char qwq;
struct comp{
string s;
long long a[15];
//分别为(1开始) a b c d e , :
bool xz;
bool qdl,shai;//qdl包括前缀0和以上除第三种情况的判断;shai是用来标记此机器是否合理,主要用于判断第三种情况。
}e[1005];
int k;
int main(){
cin>>n;qwq=getchar();
for(int i=1;i<=n;i++){
getline(cin,e[i].s);k=1;
int len=e[i].s.size()-1;
int cmp=0;
for(int j=7;j<=len;j++){
if(e[i].s[j]=='.'){
e[i].a[6]++;
cmp=1;
if(!(e[i].s[j-1]>='0'&&e[i].s[j-1]<='9')||!(e[i].s[j+1]>='0'&&e[i].s[j+1]<='9')){
e[i].qdl=1;
break;
}
}
else if(e[i].s[j]==':'){
e[i].a[7]++;
cmp=1;
if(!(e[i].s[j-1]>='0'&&e[i].s[j-1]<='9')||!(e[i].s[j+1]>='0'&&e[i].s[j+1]<='9')){
e[i].qdl=1;
break;
}
}
else if(e[i].s[j]=='0'&&e[i].s[j-1]==' '&&e[i].s[j+1]>='0'&&e[i].s[j+1]<='9'){
e[i].qdl=1;
break;
}
else if(e[i].s[j]>='0'&&e[i].s[j]<='9'){
if(cmp==1){
k++;cmp=0;
if(e[i].s[j]=='0'&&e[i].s[j+1]>='0'&&e[i].s[j+1]<='9'){
e[i].qdl=1;
break;
}
}
e[i].a[k]*=10;
e[i].a[k]+=e[i].s[j]-'0';
}
else{
e[i].qdl=1;
break;
}
}
if(e[i].s[0]=='C') e[i].xz=1;
}
for(int i=1;i<=n;i++){
if(e[i].xz==0){
bool keyi=1;
if(e[i].qdl==1)
cout<<"ERR\n",keyi=0,e[i].shai=1;
else if(e[i].a[6]>3||e[i].a[6]<3||e[i].a[7]>1||e[i].a[7]<1)
cout<<"ERR\n",keyi=0,e[i].shai=1;
else if(e[i].a[1]>255||e[i].a[2]>255||e[i].a[3]>255||e[i].a[4]>255||e[i].a[5]>65535)
cout<<"ERR\n",keyi=0,e[i].shai=1;
else
for(int j=1;j<i;j++)
if(e[i].a[1]==e[j].a[1]&&e[i].a[2]==e[j].a[2]&&e[i].a[3]==e[j].a[3]&&e[i].a[4]==e[j].a[4]&&e[i].a[5]==e[j].a[5]&&e[j].xz==0&&!e[j].shai){
cout<<"FAIL\n";
keyi=0;
break;
}
if(keyi==1)
cout<<"OK\n";
}
if(e[i].xz==1){
if(e[i].qdl==1)
cout<<"ERR\n";
else if(e[i].a[6]>3||e[i].a[6]<3||e[i].a[7]>1||e[i].a[7]<1)
cout<<"ERR\n";
else if(e[i].a[1]>255||e[i].a[2]>255||e[i].a[3]>255||e[i].a[4]>255||e[i].a[5]>65535)
cout<<"ERR\n";
else
for(int j=0;j<i;j++){
if(e[i].a[1]==e[j].a[1]&&e[i].a[2]==e[j].a[2]&&e[i].a[3]==e[j].a[3]&&e[i].a[4]==e[j].a[4]&&e[i].a[5]==e[j].a[5]&&e[j].xz==0&&!e[j].shai){
cout<<j<<"\n";
break;
}
if(j==i-1)
cout<<"FAIL\n";
}
}
}
return 0;
}
找不同程序,比较两个输出,一个是标准输出,一个是自己的输出,看看哪里不同
#include<bits/stdc++.h>
using namespace std;
string a[1005],b[1005];
int main(){
for(int i=1;i<=1000;i++)
getline(cin,a[i]);
for(int i=1;i<=1000;i++)
getline(cin,b[i]);
for(int i=1;i<=1000;i++)
if(a[i]!=b[i]){
cout<<i<<endl;
break;
}
return 0;
}
声明:此短文并不是讨论区题解,而是为了后人写的一篇小小的纠错短文/kk。