北大ACM1002题 编译好了在VC上能运行,但交上去,显示运行错误。 希望牛人指出错在哪?为什么?怎么改?

2025-03-04 09:12:23
推荐回答(3个)
回答1:

int n,i,j;
int a[999][7]; //*b=new int[n]; //这里使用了未初始化的n,程序不能为b分配内存,
char zh[]="2223334445556667-77888999-";
char w;
cin>>n;
int *b=new int[n]; //改到这里就可以了

回答2:

//现在超时
#include
#include
using namespace std;
int main()
{
int n,i,j;
int a, *b=new int[n];
char zh[]="2223334445556667-77888999-";
char w;
cin>>n;
for(i=0;i {
b[i]=0;
for(j=0;j<7;j++)
{
cin>>w;
if(w=='\n')
break;
if(w=='-')
{
j--;
continue;
}
if(w<='9'&&w>='0')
a=w-48;// a[i][j]=w-48; a数组定义太小了
if(w<='Z'&&w>='A')
a=zh[w-65]-48;
b[i]=b[i]+a*pow(10.0,6-j);
}
}
//输入号码,整理,转化整形,
int k;
for(i=0;i {
for(j=i+1;j {
if(b[i]>b[j])
{k=b[j];b[j]=b[i];b[i]=k;}
}
}
//从小到大排列
int m,q=0;
for(i=0;i<=n;i=j)
{
m=1;
for(j=i+1;j {
if(b[i]==b[j])
{
m++;q++;
}
if(b[i] break;
}
if(m>=2)
cout< }
if(q==0)
cout<<"No duplicates."< return 0;
}//计算重复个数,并输出。

回答3:

#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
int n,i,j;
int a, b[100005];
char zh[]="2223334445556667-77888999-";
char w[50];
scanf("%d",&n);
for(i=0;i {
b[i]=0;
scanf("%s",w);
for(j=0;j {
if(w[j]=='-'||w[j]=='Q'||w[j]=='Z')
{
continue;
}
if(w[j]<='9'&&w[j]>='0')
a=w[j]-48;// a[i][j]=w-48; a数组定义太小了
if(w[j]<='Z'&&w[j]>='A')
a=zh[w[j]-65]-48;
// b[i]=b[i]+a*pow(10.0,6-j);
b[i]=b[i]*10+a;
}
}
//输入号码,整理,转化整形,

sort(b,b+n);
//从小到大排列

int m=1,q=0;
for(i=0;i {
if(b[i]==b[i+1])
{
m++; q=1;
}
else
if(b[i]!=b[i+1])
{ if(m>1)
//cout< //前导0
printf("%03d-%04d %d\n",b[i]/10000,b[i]%10000,m);
m=1;

}

}
if(m>1)printf("%03d-%04d %d\n",b[i]/10000,b[i]%10000,m);
if(q==0)
cout<<"No duplicates."<
//system("pause");
return 0;
}//计算重复个数,并输出。
//AC
8700594 porker2008 1002 Accepted 1060K 594MS G++ 1099B 2011-05-28 21:14:30