有人要的
輸入
12 3 9 8 4 8 7 4 8 9 6 9 8 3
結果
8 7 4
8 9 6
9 8 3
9 8 4
輸入時12為個數,3為每3個一組排列(12要被3整除),先比較第一個元素,比較小的先印出,如果一樣在繼續比第二個...依此類推
必須用qsort函式void (void *base,size_t num,size_t size,int (*comp_func)(const void *,const void *))
// 2007/5/18 17:28-18:25
//g++ -pipe -o p4 p4.cpp && p4 12 3 9 8 4 8 7 4 8 9 6 9 8 3
#include <stdlib.h>
#include <stdio.h>
int compar_func(const void* a, const void* b){
int *p1=(int*)a,*p2=(int*)b,l1=*p1,l2=*p2,l=l1>l2?l2:l1,i=0;
while(i<=l&&*++p1==*++p2);
return i<=l?*p1-*p2:l1==l2?0:l1>l2?1:-1;
}
int main(int argc,const char *argv[]){
if(argc<4)return 1;
const int group_length=atoi(argv[2]),group_count=(argc-3+group_length-1)/group_length,nums_length=group_count*(group_length+1);
int* nums=(int*)malloc(nums_length*sizeof(int));
if(nums==NULL){printf("I can't allocates memory!");return 1;}
for(int i=0,j=3,*p=nums;i<nums_length;i++)
*p++=j<argc?i%(group_length+1)==0?group_length:atoi(argv[j++]):0;
qsort(nums, group_count, (group_length+1)*sizeof(*nums), compar_func);
for(int i=0,*p=nums;i<nums_length;i++)
if(i%(group_length+1)==0)printf("\n"),p++;
else printf("%d ",*p++);
printf("\n");
free(nums);
return 0;
}
沒有留言:
張貼留言