poj 1002 自己测试运行结果正确但提交后wrong answer,请高手指教

#include<iostream>#include<string>usingnamespacestd;intmain(){intnum,count,temp;boolf... #include <iostream>
#include <string>
using namespace std;
int main()
{
int num,count,temp;
bool flag=0;
cin>>num;
int i,j;
string* data=new string[num];
int* sum=new int[num];
char map[30]="22233344455566677778889999";
for (i=0;i<num;i++) //转化为数字格式
{
cin>>data[i];
sum[i]=0;
for (j=0;j<data[i].size();j++)
{
if ((data[i][j]>='A' && data[i][j]<='P') || (data[i][j]>='R' && data[i][j]<='Y'))
data[i][j]=map[data[i][j]-'A'];
if (data[i][j]>='0' && data[i][j]<='9')
sum[i]=sum[i]*10+data[i][j]-'0';
}
}
for (i=0;i<num-1;i++) //统计重复次数并输出
{
count=1;
for (j=i+1;j<num;j++)
{
if (sum[i]==sum[j] && sum[i]!=-1)
{
sum[j]=-1;
count++;
}
}
sum[i]=-1;
if (count>1)
{
flag=1;
temp=0;
for (j=0;j<data[i].size();j++) //按格式要求输出号码,还有符号'-'
{
if (data[i][j]>='0' && data[i][j]<='9')
{
if (temp!=3)
{
cout<<data[i][j];
temp++;
}
else
{
cout<<"-";
temp++;
j--;
}
}
}
cout<<" "<<count<<endl;
}
}
if (!flag)
cout<<"No duplicates."<<endl;
return 0;
}
注释了char map[30]="22233344455566677778889999";
将转换方式改动如下:
for (j=0;j<data[i].size();j++)
{
if (data[i][j]>='A' && data[i][j]<='P')
data[i][j]=(data[i][j]-'A')/3+2+'0';
if (data[i][j]>='R' && data[i][j]<='Y')
data[i][j]=(data[i][j]-'A'-1)/3+2+'0';
if (data[i][j]>='0' && data[i][j]<='9')
sum[i]=sum[i]*10+data[i][j]-'0';
}
仍然是wrong answer,求大神们指点呀~~
展开
 我来答
yleek
2011-12-01 · TA获得超过125个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:101万
展开全部
建议读读poj的说明,可能得把你自己的部分东西注释掉。。。比如说你自己定义的char[30]
追问
读了一遍Frequently Asked Questions ,没能发现问题,请问自己定义的char[30]有什么问题,求指教
bdlanyu
2011-12-07 · TA获得超过550个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:520万
展开全部
#include <stdio.h>
int p[10000000]= {0};
int main()
{
char *map="22233344455566677778889999",str[120];
int n,i,j,k,flag=0;
scanf("%d",&n);
for (i=0; i<n; i++) //转化为数字格式
{
scanf("%s",str);
for (j=0,k=0; str[j]!='\0'; j++)
{
if ((str[j]>='A' && str[j]<='Z')) k = k*10 + map[str[j]-'A'] - '0';
else if (str[j]>='0' && str[j]<='9') k= k*10 + str[j] - '0';
}
p[k]++;
}
for(k=0; k<10000000; k++)
{
if(p[k]>1)
{
printf("%03d-%04d %d\n",k/10000,k%10000,p[k]);
flag=1;
}
}
if(!flag) printf("No duplicates.");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huanyingzixin
2011-12-05
知道答主
回答量:44
采纳率:0%
帮助的人:13.8万
展开全部
貌似要升序输出吧,而且if(count==1)好像没输出
追问
题目没有要求升序呀,而且不重复的情况是不输出的,不过还是谢谢啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘渺笑营
2011-12-04
知道答主
回答量:97
采纳率:0%
帮助的人:25.1万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式