快速排序 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; }
相关文章推荐
- 快速排序
- C#快速排序算法实例分析
- C#递归算法之快速排序
- C 语言快速排序实例代码
- C++快速排序的分析与优化详解
- php快速排序原理与实现方法分析
- js实现数组冒泡排序、快速排序原理
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- Java实现快速排序算法(Quicktsort)
- Java中的数组排序方式(快速排序、冒泡排序、选择排序)
- 快速排序的原理及java代码实现
- C/C++实现快速排序的方法
- c语言实现冒泡排序、希尔排序等多种算法示例
- 深入单链表的快速排序详解
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- JavaScript实现快速排序的方法
- 逐步讲解快速排序算法及C#版的实现示例