您的位置:首页 > 其它

快速排序 487-3279 poj1002

2016-07-19 21:07 274 查看
这一题应该是考察快速排序问题,题意是输入若干字符,需要对这些字符进行转换成对应的数字,需要注意的是Q和Z没有对应的数字,最后需要将重复次数大于1的号码排序输出。如果没有重复的也要输出No duplicates.

#include "stdio.h"
#include "string.h"
#define max 100000
long num[max];
long convent(char s[])
{
long i,l,sum=0;
int k=0;
l=strlen(s);
for(i=0;k<7;i++)
{
if(s[i]>='0'&&s[i]<='9')
{sum=sum*10+(s[i]-'0');k++;}
else if(s[i]>='A'&&s[i]<='Z')
{sum=sum*10+((s[i]-'A'-(s[i]>'Q'))/3+2);k++;}
}
return sum;
}
void sort(int left,int right)
{
int i=left,j=right;
long mid=num[(left+right)/2];
while(i<=j)
{
while(num[i]<mid) i++;
while(num[j]>mid) j--;
if(i<=j){
long tem=num[i];
num[i]=num[j];num[j]=tem;
i++,j--;
}
}
if(i<right) sort(i,right);
if(left<j) sort(left,j);
}
int main()
{
long i,n,flag,k;
char s[320];
memset(num,0,sizeof(num));
scanf("%ld",&n);
for(i=0;i<n;i++)
{
scanf("%s",&s);
num[i]=convent(s);
}
sort(0,n-1);
flag=1;
k=1;
for(i=0;i<n;i++)
{
if(k>1&&num[i]!=num[i+1])
{
printf("%03d-%04d %ld\n",num[i]/10000,num[i]%10000,k);
k=1;flag=0;
}
else if(num[i]==num[i+1]) k++;
}
if(flag) printf("No duplicates.\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息