http://poj.org/problem?id=1002
此题大意为输入一系列电话号,输出重复出现的电话号
输入:可以输入大写字母(除了Q和Z),数字或者横线(-)
字母按拼音九键的对应规则,横线为无意义输入
算法:先把输入整理为七位数字,存进b[N]
将b[N]用sort(b,b+n)排序
输出:遍历b,若有重复,记录重复次数,按111-1111 n格式输出(n为重复次数)
若无重复,输出No duplicates.
//输入 //格式化输入 //直接插入排序 //输出重复 #include<iostream> #include<string> #include<string.h> #include<algorithm> using namespace std; #define N 100000 int main(){ int n,i,j,p,q,sum; string s; int b[N+1],temp; char c[100]; scanf("%d",&n); for(i=0;i<n+1;i++){ b[i] = 0; } i = 0; while(i<n){ scanf("%s",c); p = 7; q = 1000000; temp = 0; for(j=0;j<strlen(c)&&p>0;j++,p--,q/=10){ //对输入数据进行加工 if(c[j]=='A'||c[j]=='B'||c[j]=='C'){ temp += 2*q; } else if(c[j]=='D'||c[j]=='E'||c[j]=='F'){ temp += 3*q; } else if(c[j]=='G'||c[j]=='H'||c[j]=='I'){ temp += 4*q; } else if(c[j]=='J'||c[j]=='K'||c[j]=='L'){ temp += 5*q; } else if(c[j]=='M'||c[j]=='N'||c[j]=='O'){ temp += 6*q; } else if(c[j]=='P'||c[j]=='R'||c[j]=='S'){ //没有Q temp += 7*q; } else if(c[j]=='T'||c[j]=='U'||c[j]=='V'){ temp += 8*q; } else if(c[j]=='W'||c[j]=='X'||c[j]=='Y'){ //没有Z temp += 9*q; } else if(c[j]>='0'&&c[j]<='9'){ temp += (c[j]-'0')*q; } else{ p++; q *= 10; } } b[i] = temp; //cout<<temp; /* j = i; while(temp<b[j]){ b[j+1] = b[j]; j--; } b[j+1] = temp; //cout<<temp<<" "<<j+1<<endl; for(j=1;j<=i;j++){ cout<<b[j]<<" "<<j<<endl; } */ i++; }//while sort(b,b+n); b[n] = -1; p = 0; q = 1; sum = 0; while(q<n){ while(b[q]==b[p]){ q++; } if(q-p>1){ printf("%03d-%04d %d\n",b[p]/10000,b[p]%10000,q-p); sum++; } p = q; q = q+1; } if(sum==0){ printf("No duplicates.\n"); } /* for(i=1;i<=n;i++){ cout<<b[i]<<" "<<endl; } for(i=1,j=0;i<=sum;i++){ //if(duplicate[i]>1){ p = b[i]/10000; q = b[i]%10000; cout<<p<<"-"<<q<<" "<<duplicate[i]<<endl; j++; } } */ return 0; }
————————————————
版权声明:本文为****博主「abc827300139」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/ABC827300139/article/details/101788281