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,求大神们指点呀~~ 展开
#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,求大神们指点呀~~ 展开
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
貌似要升序输出吧,而且if(count==1)好像没输出
追问
题目没有要求升序呀,而且不重复的情况是不输出的,不过还是谢谢啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询