6.3w+
社区成员
#include<iostream>
#include<iomanip.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
main()
{
int i,j,line,k,duplicate=0,times;
char ssphone[101],snphone[8];
char phonetable[]="2223334445556667777888999"; //用差值填充字符数组,快速计算转换后的值
cin>>line;
long *nphone=new long[line];
for(i=0;i<line;i++)
{
cin>>ssphone;
k=0;
for(j=0;ssphone[j];j++)
{
if(ssphone[j]>='A'&&ssphone[j]<'Z')
{
snphone[k]=phonetable[ssphone[j]-'A'];
k++;
}
if(ssphone[j]>='0'&&ssphone[j]<='9')
{
snphone[k]=ssphone[j];
k++;
}
}
nphone[i]=atoi(snphone); //字符数组转化为int
}
qsort(nphone,line,sizeof(long),cmp); //qsort快速排序
for(i=0;i<line;)
{
times=1;
for(j=i+1;j<line&&nphone[j]==nphone[i];j++)
times++; //号码已排序 相同号码相邻 计算出现次数
if(times>1)
{
duplicate=1;
cout<<setfill('0')<<setw(3)<<nphone[i]/10000<<"-"<<setfill('0')<<setw(4)<<nphone[i]%10000<<" "<<times<<endl;
}
//上面输出语句对输出格式做了精确控制
i=j; //将j赋给i 跳到下个号码
}
if(duplicate==0)cout<<"No duplicates."<<endl;
delete[]nphone;
system("pause");
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int *init_(int n)//初始化
{
int *c;
if(!(c=(int *)malloc(n*sizeof(int)))) exit(0);
for(int i=0;i <n;i++)*(c+i)=0;
return c;
}
int search_(char c)//映射关系
{ //A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
int a[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,-1,7,7,8,8,8,9,9,9,-1};
if(c>='a'&&c <='z') return a[c-'a']; //c >= 'a' && c <='z'
if(c>='A'&&c <='Z') return a[c-'A']; //...
}
void input_(int *a,int n)//保存输入,将一个号码保存为一个7位数
{
int i=0,m,t;
char c;
while(i <n)
{ t=0;
while(t <7)
{
scanf("%c",&c);
if(c=='\n' ||c=='-') continue;//跳过回车和“-”
if((c>='a'&&c <='z') ||(c>='A'&&c <='Z')) //c>='a' && c<='z'
m=search_(c); //字母转化为对应的数字
else m=c-'0';
if(m==-1) exit(0);//输入不合格
a[i]=a[i]*10+m;
t++;
}
i++;
}
}
void stict(int *a,int *b,int n)//号码个数统计,存于b数组中
{
int i,j;
for (i=0;i <n;i++)
{
b[i]++;
if(b[i]>0)
{
for(j=i+1;j <n;j++)
{
if(a[i]==a[j])
{
b[j]=-1;
b[i]+=1;
}
}
}
}
}
int main()
{
int *a,i=0,j,n;
scanf("%d",&n);
if(n <1 ||n>100000) exit(0);
a=init_(n);
input_(a,n);
int *b=init_(n);
stict(a,b,n);
for(i = 0; i < n; ++i) //如果有多个重复的按从小到大的顺序
{
for(j = i+1; j < n; ++j)
{
if(a[i] > a[j])
{
int tmp = a[i]; int _tmp = b[i];//交换的a[]大小,同时也要交换该值相应的b[]
a[i] = a[j]; b[i] = b[j];
a[j] = tmp; b[j] = _tmp;
}
}
}
for(i=0;i <n;i++)
if(b[i]>1) //输出时重复 > 1
printf("%d-%d %d\n",(*(a+i))/10000,(*(a+i))%10000,*(b+i));
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int *init_(int n)//初始化
{
int *c;
if(!(c=(int *)malloc(n*sizeof(int)))) exit(0);
for(int i=0;i <n;i++)*(c+i)=0;
return c;
}
int search_(char c)//映射关系
{ //A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
int a[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,-1,7,7,8,8,8,9,9,9,-1};
if(c>'a'&&c <'z') return a[c-'a'];
if(c>'A'&&c <'Z') return a[c-'A'];
}
void input_(int *a,int n)//保存输入,将一个号码保存为一个7位数
{
int i=0,m,t;
char c;
while(i <n)
{ t=0;
while(t <7)
{
scanf("%c",&c);
if(c=='\n' ||c=='-') continue;//跳过回车和“-”
if((c>'a'&&c <'z') ||(c>'A'&&c <'Z'))
m=search_(c); //字母转化为对应的数字
else m=c-'0';
if(m==-1) exit(0);//输入不合格
a[i]=a[i]*10+m;
t++;
}
i++;
}
}
void stict(int *a,int *b,int n)//号码个数统计,存于b数组中
{
int i,j;
for (i=0;i <n;i++)
{
b[i]++;
if(b[i]>0)
{
for(j=i+1;j <n;j++)
if(a[i]==a[j])
{
b[j]=-1;
b[i]+=1;
}
}
}
}
int main()
{
int *a,i=0,n;
scanf("%d",&n);
if(n <1 ||n>100000) exit(0);
a=init_(n);
input_(a,n);
int *b=init_(n);
stict(a,b,n);
for(i=0;i <n;i++)
if(b[i]>0)
printf("%d-%d %d\n",(*(a+i))/10000,(*(a+i))%10000,*(b+i));
getchar();getchar();
return 0;
}