从午后一点呼呼睡到三点,昏昏沉沉的,感觉学不了平衡树,于是找了道水题做做,不过这题虽然水但是很麻烦……浑浑噩噩的打代码调错误……会用sort函数就可以了,没什么特别的吧
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int pho[100005],ans[100005][7];
int ansnum[100005];
int book[]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9};//打表
int num[7]={1000000,100000,10000,1000,100,10,1};//打表
int cmp(int &a,int &b) // 升序排序
{
if(a<b)
return 1;
else return 0;
};
int main()
{
int n,i,j,len,k,flag,temp;
char str[20];
memset(pho,0,sizeof(pho));
cin>>n;
for(i=0;i<n;i++)
{
cin>>str;
len=strlen(str);
k=0;
for(j=0;j<len;j++)
{
if(str[j]>='A'&&str[j]<='Z') //把字符串变成一个七位整数好排序
pho[i]+=book[str[j]-'A']*num[k++];
else if(str[j]!='-')
pho[i]+=(str[j]-'0')*num[k++];
}
}
sort(pho,pho+n,cmp);
memset(ansnum,0,sizeof(ansnum));
k=0;
flag=1;
for(i=1;i<n;i++)
{
if(pho[i]==pho[i-1])
{
if(flag)
{
temp=pho[i];
k++;
for(j=6;j>=0;j--) //逆着赋值,输出的时候方便
{
ans[k][j]=temp%10;
temp/=10;
}
flag=0;
}
ansnum[k]++;
}
else flag=1;
}
if(k==0) {cout<<"No duplicates. "<<endl;return 0;}
for(i=1;i<=k;i++)
{
for(j=0;j<3;j++)
{
printf("%d",ans[i][j]);
}
cout<<"-";
for(j=3;j<7;j++)
{
printf("%d",ans[i][j]);
}
cout<<" "<<ansnum[i]+1<<endl;
}
}