POJ 1002 487-3279(水题)

来源:互联网 发布:手机做广告软件 编辑:程序博客网 时间:2024/06/08 18:42

没什么好说的,事先设置一个表,对应字母到数字的转换,读入每一位并对应转换成int存起来,排序后即可判断有多少重复,代码还是丑陋不堪,C和C++不分

#include<iostream>#include<string>#include<stdlib.h>using namespace std;int numint[110000]={0};char number[110000][100]={0};int compare(const void *a, const void *b){return(*(int *)a-*(int *)b);}int main(){int n=0,i=0,j=0,N=0,point=1000000,d[40]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9},k=0;cin>>n;getchar();for(i=0;i<n;i++){gets(number[i]);N=strlen(number[i]);point=1000000;for(j=0;j<N;j++){if(number[i][j]=='-'){continue;}if(number[i][j]<='9'&&number[i][j]>='0'){numint[i]+=(number[i][j]-'0')*point;point=point/10;continue;}numint[i]+=d[number[i][j]-'A']*point;point=point/10;}}qsort(numint,n,sizeof(int),compare);for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(numint[i]!=numint[j]){if(j-i>1){printf("%03d-%04d %d\n", numint[i]/10000, numint[i]%10000, j-i);i=j-1;k=1;break;}else{i=j-1;break;}}}if(numint[i]==numint[j-1]&&j==n&&i!=j-1){printf("%03d-%04d %d\n", numint[i]/10000, numint[i]%10000, j-i);k=1;break;}}if(!k){cout<<"No duplicates."<<endl;}}


原创粉丝点击