浏览 1671 次
锁定老帖子 主题:杰哥私房题──排列
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-10
问题: 大家知道,给出正整数n,则1 到n 这n 个数可以构成n!种排列,把这些排列按照从
#include <stdio.h> int MyCompare(const void* e1, const void* e2){ return *((int*) e1) - *((int*) e2); } int main(){ int nCases; scanf("%d", &nCases); int an[1034], in,n; while(nCases --){ int k; scanf("%d %d", &n, &k); for(in = 0; in < n ; in ++){ scanf("%d", &an[in]); } int i,j,index = -1; for(i = 0; i < k; i ++){ for(j = n -1; j >= 0; j--){ if(an[j - 1] < an[j]){ index = j - 1; break; } } int m; if(index == -1 ){ int roop; for(roop = n ; roop > 0; roop --){ printf("%d ", an[roop -1]); } printf("\n"); return 0; } int candidate = an[j], index2 = j; for(m = j; m < n; m++){ if(an[m] > an[index] && an[m] < candidate){ candidate = an[m]; index2 = m; } } int swap = an[index]; an[index] = candidate; an[index2] = swap; qsort(an + j, n - j , sizeof(int), MyCompare); } } int i; for(i = 0; i < n; i++){ printf("%d ", an[i]); } printf("\n"); return 0; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |