注册 登录
编程论坛 C语言论坛

数组排列 但搞不懂怎么输出

t17 发布于 2023-09-17 14:14, 422 次点击
Description
2022年6月17日下午,ywh 结束了他的电路考试,他觉得自己发挥得非常好,所以他的长辈 x-x 决定和他一起玩个小游戏,如果他能成功通关,那么 x-x 会奖励 ywh 最喜欢吸的速溶柠檬粉。小游戏规则如下: 给 ywh n 个互不相同的数字,经过随意排列后(每个数字都需要参与排列),他需要快速地回答第 k 大的数,可是 ywh 在经过高数和电路考试后彻底失智,所以他求助了他的好朋友,也就是屏幕前的你,请你帮助他赢得他最爱的奖励!

(回答成功便有机会和 ywh 一起吸他最爱的速溶柠檬粉!)(是真的!)

注:第 k 大指的是从大到小排第 k

Input
第一行给出 n、k 。(1≤n≤9,  1≤k≤n!)

第二行给出一长度为 n 的数组 a , (1≤ai≤9) 且各不相同。

Output
将 a 数组中的数任意组合,求其中第 k 大的数。(题目保证能找到第 k 大的数)

Samples
input
5 1
1 2 3 4 5
output
54321
1 回复
#2
forever742023-09-17 19:59
供参考:
程序代码:
#include <stdio.h>
int a[10], b[10], N, K, k;
void pailie(int n)
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        a[N - n] = b[i];
        for (j = 0; j < N - n; j++)
            if (b[i] == a[j])    break;
        if (j < N - n)
            continue;
        if (n > 1)
            pailie(n - 1);
        else if (++k == K)
        {
            for (j = 0; j < N; j++)printf("%d", a[j]);
            printf("\n");
        }
    }

}
int main()
{
    int i, j, t;
    scanf("%d%d", &N, &K);
    for (i = 0; i < N; i++)
        scanf("%d", &b[i]);
    for (i = 0; i < N - 1; i++)
        for (j = i + 1; j < N; j++)
            if (b[i] < b[j])
            {
                t = b[i]; b[i] = b[j]; b[j] = t;
            }
    pailie(N);
    return 0;
}
1