模拟
- #include
- #include
- #include
- #include
- #include
- using namespace std;
- int vis[100000000];
- int n,flag;
- long long a[100005];
- char s[400];
- int chang(char x) {
- if (x>='0'&&x<='9') {
- int tmp=x-'0';
- return tmp;
- }
- if (x>='A'&&x<='C') return 2;
- if (x>='D'&&x<='F') return 3;
- if (x>='G'&&x<='I') return 4;
- if (x>='J'&&x<='L') return 5;
- if (x>='M'&&x<='O') return 6;
- if (x>='P'&&x<='S') return 7;
- if (x>='T'&&x<='V') return 8;
- if (x>='W'&&x<='Y') return 9; // 返回对应的数值
- }
- int main() {
- scanf("%d",&n);
- flag=0;
- for (int i=1; i<=n; i++) {
- scanf("%s",s); // 输入字符串
- long long tmp=0;
- for (int j=0; s[j]; j++) // 如果 s[j] 存在
- if (s[j]=='-') continue; // 跳过
- else tmp=tmp*10+chang(s[j]); // 号码
- vis[tmp]++; // 标记出现过几次
- a[i]=tmp; // 记录号码
- if (vis[tmp]>=2) flag=1; // 如果大于两次 就记录 准备输出
- }
- if (!flag) {
- printf("No duplicates.\n");
- return 0;
- }
- sort(a+1,a+1+n); // 出现的次数 默认升序
- for (int i=1; i<=n; i++)
- if (vis[a[i]]>=2) { // 如果出现了两次 才输出
- int kk=1000000;
- int ans=a[i];
- for (int j=1; j<=7; j++) {
- int tmp=ans/kk; // 取第一位
- ans%=kk; // 取第一位之后的数字
- kk/=10; //kk 少一位 0
- printf("%d",tmp); // 输出每一位
- if (j==3) printf("-"); // 记得输出 -
- }
- printf("%d\n",vis[a[i]]); // 输出次数
- vis[a[i]]=0; // 再归零
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-3259285.html