北大ACM1002题 编译好了在VC上能运行,但交上去,显示运行错误。 希望牛人指出错在哪?为什么?怎么改? 50
这是我做的这是题目网址:http://poj.org/problemlist,第1002题;#include<iostream>#include<math.h>using...
这是我做的
这是题目网址:http://poj.org/problemlist ,第1002题;
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,i,j;
int a[999][7], *b=new int[n];
char zh[]="2223334445556667-77888999-";
char w;
cin>>n;
for(i=0;i<n;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[i][j]=w-48;
if(w<='Z'&&w>='A')
a[i][j]=zh[w-65]-48;
b[i]=b[i]+a[i][j]*pow(10.0,6-j);
}
}
//输入号码,整理,转化整形,
int k;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;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<n;j++)
{
if(b[i]==b[j])
{
m++;q++;
}
if(b[i]<b[j])
break;
}
if(m>=2)
cout<<b[i+m-1]/10000<<'-'<<b[i+m-1]%10000<<' '<<m<<endl;
}
if(q==0)
cout<<"No duplicates."<<endl;
return 0;
}//计算重复个数,并输出。
//我觉得在int a[999][7](在开头)中,有问题。为什么999不能改成一个比较大的数字(一旦超过1万6,编译时直接跳出,貌似是数组越界的错误提示。直接不能运行了),我觉 提交上去显示运行错误,就是因为这个。
是不是因为用了个动态数组?有关系吗?如果可以的话最好就是在这个程序的基础上改成符合条件的,如果不可以也说说为什么?最好把一个正确的发过来看看(要C++的不要C的),听说这道题是多种解法的,有多种方法的话也让小弟分享下下 。
高分求助了,高手不要小气了。帮帮小弟。
要是好的话可以追加分的 展开
这是题目网址:http://poj.org/problemlist ,第1002题;
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,i,j;
int a[999][7], *b=new int[n];
char zh[]="2223334445556667-77888999-";
char w;
cin>>n;
for(i=0;i<n;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[i][j]=w-48;
if(w<='Z'&&w>='A')
a[i][j]=zh[w-65]-48;
b[i]=b[i]+a[i][j]*pow(10.0,6-j);
}
}
//输入号码,整理,转化整形,
int k;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;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<n;j++)
{
if(b[i]==b[j])
{
m++;q++;
}
if(b[i]<b[j])
break;
}
if(m>=2)
cout<<b[i+m-1]/10000<<'-'<<b[i+m-1]%10000<<' '<<m<<endl;
}
if(q==0)
cout<<"No duplicates."<<endl;
return 0;
}//计算重复个数,并输出。
//我觉得在int a[999][7](在开头)中,有问题。为什么999不能改成一个比较大的数字(一旦超过1万6,编译时直接跳出,貌似是数组越界的错误提示。直接不能运行了),我觉 提交上去显示运行错误,就是因为这个。
是不是因为用了个动态数组?有关系吗?如果可以的话最好就是在这个程序的基础上改成符合条件的,如果不可以也说说为什么?最好把一个正确的发过来看看(要C++的不要C的),听说这道题是多种解法的,有多种方法的话也让小弟分享下下 。
高分求助了,高手不要小气了。帮帮小弟。
要是好的话可以追加分的 展开
展开全部
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]; //改到这里就可以了
int a[999][7]; //*b=new int[n]; //这里使用了未初始化的n,程序不能为b分配内存,
char zh[]="2223334445556667-77888999-";
char w;
cin>>n;
int *b=new int[n]; //改到这里就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//现在超时
#include<iostream>
#include<math.h>
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<n;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<n;i++)
{
for(j=i+1;j<n;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<n;j++)
{
if(b[i]==b[j])
{
m++;q++;
}
if(b[i]<b[j])
break;
}
if(m>=2)
cout<<b[i+m-1]/10000<<'-'<<b[i+m-1]%10000<<' '<<m<<endl;
}
if(q==0)
cout<<"No duplicates."<<endl;
return 0;
}//计算重复个数,并输出。
#include<iostream>
#include<math.h>
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<n;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<n;i++)
{
for(j=i+1;j<n;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<n;j++)
{
if(b[i]==b[j])
{
m++;q++;
}
if(b[i]<b[j])
break;
}
if(m>=2)
cout<<b[i+m-1]/10000<<'-'<<b[i+m-1]%10000<<' '<<m<<endl;
}
if(q==0)
cout<<"No duplicates."<<endl;
return 0;
}//计算重复个数,并输出。
追问
( ⊙ o ⊙ )啊! 对哦那数组可以不用的,,,那能把它改成不超时吗?
追答
//ac的代码
#include
#include
#include
#include
using namespace std;
int main()
{
int n,i,j;
int a, b[100005];
char zh[]="2223334445556667-77888999-";
char w[50];
cin>>n;
for(i=0;i>w;
for(j=0;j='0')
a=w[j]-48;// a[i][j]=w-48; a数组定义太小了
if(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;i1)
//cout1)printf("%0.3d-%0.4d %d\n",b[i]/10000,b[i]%10000,m);
if(q==0)
cout<<"No duplicates."<<endl;
system("pause");
return 0;
}//计算重复个数,并输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
#include<math.h>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdio>
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<n;i++)
{
b[i]=0;
scanf("%s",w);
for(j=0;j<strlen(w);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<n-1;i++)
{
if(b[i]==b[i+1])
{
m++; q=1;
}
else
if(b[i]!=b[i+1])
{ if(m>1)
//cout<<b[i]/10000<<'-'<<b[i]%10000<<' '<<m<<endl;
//前导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."<<endl;
//system("pause");
return 0;
}//计算重复个数,并输出。
//AC
8700594 porker2008 1002 Accepted 1060K 594MS G++ 1099B 2011-05-28 21:14:30
#include<math.h>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdio>
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<n;i++)
{
b[i]=0;
scanf("%s",w);
for(j=0;j<strlen(w);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<n-1;i++)
{
if(b[i]==b[i+1])
{
m++; q=1;
}
else
if(b[i]!=b[i+1])
{ if(m>1)
//cout<<b[i]/10000<<'-'<<b[i]%10000<<' '<<m<<endl;
//前导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."<<endl;
//system("pause");
return 0;
}//计算重复个数,并输出。
//AC
8700594 porker2008 1002 Accepted 1060K 594MS G++ 1099B 2011-05-28 21:14:30
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询