您的位置:首页 > 其它

poj 1002 487-3279

2014-03-07 16:42 309 查看
http://poj.org/problem?id=1002

题目大意:意思是说将某些字母对应成数字,然后找出输入的数据当中有多少个是重复出现的,将这些重复出现的输出,并且输出重复的次数。如果输入的数据都不相同,那么就输出“No duplicates. ”。

分析:首先得注意几点,虽然说最后的数字只有7个,但是在输入的时候因为会有“-”符号的出现,所以字符数组需要开大一点。还有就是对于0的处理。

我并没有把字符转换成整数,但是感觉转换成整数应该简单一点。

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
using namespace std;
char st[100000][300];
char m[300];
int aa[100005];
int cmp(const void* a, const void* b)
{
return (strcmp((char* )a,(char* )b));
}
int main()
{
int n,i,j,p,flag;
scanf("%d",&n);

int sum=0;
for(i=0;i<n;i++)
{
scanf("%s",st[i]);
int len;
len=strlen(st[i]);
for(j=0;j<len;j++)
{
if(st[i][j]=='Q'||st[i][j]=='Z'||st[i][j]=='-')
{
p=j;
while(p<len)
{
st[i][p]=st[i][p+1]; //处理掉‘-’
p++;
}
j--;
continue;
}
if(st[i][j]=='A'||st[i][j]=='B'||st[i][j]=='C')
st[i][j]='2';
if(st[i][j]=='D'||st[i][j]=='E'||st[i][j]=='F')
st[i][j]='3';
if(st[i][j]=='G'||st[i][j]=='H'||st[i][j]=='I')
st[i][j]='4';
if(st[i][j]=='J'||st[i][j]=='K'||st[i][j]=='L')
st[i][j]='5';
if(st[i][j]=='M'||st[i][j]=='N'||st[i][j]=='O')
st[i][j]='6';
if(st[i][j]=='P'||st[i][j]=='R'||st[i][j]=='S')
st[i][j]='7';
if(st[i][j]=='T'||st[i][j]=='U'||st[i][j]=='V')
st[i][j]='8';
if(st[i][j]=='W'||st[i][j]=='X'||st[i][j]=='Y')
st[i][j]='9';

}
}
qsort(st,n,sizeof(st[0]),cmp); //对字符数组进行排序
memset(aa,0,sizeof(aa));
strcpy(m,st[0]);
flag=0;
for(i=1;i<n;i++) //开始寻找相同的字符数组
{
if(strcmp(m,st[i])!=0||i==n-1)
{ if(i==n-1&&strcmp(m,st[i])==0)//这里是当到最后一个的时候,对于最后一组和之前的是否相同,进行讨论
aa[flag]=n-flag;
else
aa[flag]=i-flag;
flag=i;
strcpy(m,st[i]);

}
}
flag=0;
for(i=0;i<n;i++)
{
if(aa[i]>1)
{
flag=1;
for(j=0;j<3;j++)
printf("%c",st[i][j]);
printf("-");
for(j;j<7;j++)
printf("%c",st[i][j]);
printf(" %d\n",aa[i]);

}
}
if(flag==0)
{
printf("No duplicates. \n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: