杭电比赛ACM的一道题目 ,不知道是什么意思

2024-12-16 05:24:43
推荐回答(2个)
回答1:

题意就是这样,你理解也对。
f(n)如果n=1就返回。否则调用f(n-1),再交换a[n-1]和a[n]。
注意上述调用方式是先递归,再交换。那么f(n)其实就等价于先交换a[1]和a[2](即f(2)中的交换),再交换a[2]和a[3](即f(3)中的交换),...,最后交换a[n-1]和a[n](即f(n)中的交换)。所以整个交换就等价于把序列中的第一个数一路移动到最后。因为最后的序列式一个升序的序列,所以开始的序列就是n,1,2,3,...,n-1就对了。
比如输入3,那么初始序列是3,1,2。
最后让你输出一排的要求是不需要纠结的。让怎么输出怎么输出就可以了。就是两个数字之间1个空格。所以输入1 2输出1 2 1。

回答2:

也就是按照他的说明写个递归函数

当x=1时返回,不然调用f(x-1),并且交换第x和x-1个元素

if(x==1) return
f(x-1);
swap(a[x-1],a[x]);

大概就这样了,然后最后输出整条数列

不过为嘛输出是1排就不知道了,难道不同输出之间不用空行······

大概按楼下这么做就行了别·······,数组哪来的,看输入条件
Input
A single line contains integer n (1≤n≤1000) the size of permutation.

也就是说你输入n就是一个a[n]的数组,元素从1到n
a[1]=1,a[2]=2````a[n]=n
这样的········至于你下标从0开始还是从1开始都随意,反正有n个数,是1-n就行了