北大poj 1002为什么会是wrong answer?是有什么情形没有考虑么还是什么? 40
代码如下,求大神赐教,不胜感激。#include<iostream>#include<iomanip>usingnamespacestd;//调用库函数qsortintc...
代码如下,求大神赐教,不胜感激。
#include<iostream>
#include<iomanip>
using namespace std;
//调用库函数qsort
int cmp(const void * a, const void *b)
{
return *( int *) a- * (int *) b;
}
int main()
{
int num; //输入的电话号码数目
cin>>num;getchar(); //getchar()将换行符接收掉
int * a=new int [num]; //a存放num个电话号码
int i;
int k=0; //k 表示符合条件的电话号码数目
char c;
for(i=0; i<num; i++) a[i]=0;
for(i=0; i<num; i++) //读入num个电话号码并存入a数组中
{
c=cin.get();
while( c !='\n' )
{
if( c<58 && c>47)
a[i] = a[i] *10 +c-48;
else if( c>64 && c<91)
switch(c)
{
case 'A':
case 'B':
case 'C': a[i] = a[i]*10 +2;break;
case 'D':
case 'E':
case 'F':a[i] = a[i] *10 +3;break;
case 'G':
case 'H':
case 'I':a[i] = a[i] *10 +4;break;
case 'J':
case 'K':
case 'L':a[i] = a[i] *10 +5;break;
case 'M':
case 'N':
case 'O':a[i] = a[i] *10 +6;break;
case 'P':
case 'R':
case 'S':a[i] = a[i] *10 +7;break;
case 'T':
case 'U':
case 'V':a[i] = a[i] *10 +8;break;
case 'W':
case 'X':
case 'Y':a[i] = a[i] *10 +9;break;
default:break;
}
c=cin.get();
}
}
int count=0; int sum=1; int p=1;
qsort(a,num,sizeof(a[0]),cmp); //先将num个电话号码排序
//对于已经排好序的数组a,从头扫到尾,找到相同的电话并从数组a的开头存放,结束时存放了k个
for( i=0; i<num-1; i++)
{
if(a[i]== a[i+1] )
{
p++;
if( i !=num-2)
{
continue;
}
else
{
count=1;
a[k]=a[i]*10 +p;
k++;
}
}
else
{
if(p != 1)
{
count=1;
a[k]=a[i]*10 +p;
p=1;
k++;
}
else
continue;
}
}
if(count==0)
cout<<"No duplicates."<<endl;
for(i=0; i<k; i++)
{
cout<<setw(3)<<setfill('0')<<a[i]/100000<<'-'<<setw(4)<<setfill('0')<<a[i]%100000/10<<' '<<a[i]%10<<endl;
}
delete []a;
return 0;
}
给点建议也行,因为实在不知道是哪里出错了。 展开
#include<iostream>
#include<iomanip>
using namespace std;
//调用库函数qsort
int cmp(const void * a, const void *b)
{
return *( int *) a- * (int *) b;
}
int main()
{
int num; //输入的电话号码数目
cin>>num;getchar(); //getchar()将换行符接收掉
int * a=new int [num]; //a存放num个电话号码
int i;
int k=0; //k 表示符合条件的电话号码数目
char c;
for(i=0; i<num; i++) a[i]=0;
for(i=0; i<num; i++) //读入num个电话号码并存入a数组中
{
c=cin.get();
while( c !='\n' )
{
if( c<58 && c>47)
a[i] = a[i] *10 +c-48;
else if( c>64 && c<91)
switch(c)
{
case 'A':
case 'B':
case 'C': a[i] = a[i]*10 +2;break;
case 'D':
case 'E':
case 'F':a[i] = a[i] *10 +3;break;
case 'G':
case 'H':
case 'I':a[i] = a[i] *10 +4;break;
case 'J':
case 'K':
case 'L':a[i] = a[i] *10 +5;break;
case 'M':
case 'N':
case 'O':a[i] = a[i] *10 +6;break;
case 'P':
case 'R':
case 'S':a[i] = a[i] *10 +7;break;
case 'T':
case 'U':
case 'V':a[i] = a[i] *10 +8;break;
case 'W':
case 'X':
case 'Y':a[i] = a[i] *10 +9;break;
default:break;
}
c=cin.get();
}
}
int count=0; int sum=1; int p=1;
qsort(a,num,sizeof(a[0]),cmp); //先将num个电话号码排序
//对于已经排好序的数组a,从头扫到尾,找到相同的电话并从数组a的开头存放,结束时存放了k个
for( i=0; i<num-1; i++)
{
if(a[i]== a[i+1] )
{
p++;
if( i !=num-2)
{
continue;
}
else
{
count=1;
a[k]=a[i]*10 +p;
k++;
}
}
else
{
if(p != 1)
{
count=1;
a[k]=a[i]*10 +p;
p=1;
k++;
}
else
continue;
}
}
if(count==0)
cout<<"No duplicates."<<endl;
for(i=0; i<k; i++)
{
cout<<setw(3)<<setfill('0')<<a[i]/100000<<'-'<<setw(4)<<setfill('0')<<a[i]%100000/10<<' '<<a[i]%10<<endl;
}
delete []a;
return 0;
}
给点建议也行,因为实在不知道是哪里出错了。 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询