我正在尝试解决一个名为Stack of Flapjacks的问题。但不幸的是,我没有理解这个问题。所以我尝试了Google并找到了a better explanation。这个解释说翻转(k)。但我不知道该怎么做。有人请帮我解释一下。提前致谢。
答案 0 :(得分:0)
以下是原始ACM问题中的相关内容:
翻转包括在一个堆叠中的两个煎饼之间插入一把刮刀,并将刮刀上的薄煎饼翻转(翻转)(反转子堆叠)。通过给出要翻转的子堆栈底部的薄饼的位置(相对于整个堆叠)来指定翻盖。整个堆栈底部的煎饼位置为1,n层煎饼顶部的煎饼位置为n。
翻转(k)意味着从1..k逆转煎饼的顺序。部分问题在于弄清楚如何做到这一点!
使用问题中的示例,让我们说你实现了这样的煎饼堆栈:
int[] pancakes = [8, 4, 6, 7, 5, 2];
翻转操作可能写成:
int flip(int pos) {
int spare;
for (int i = 1; i < pos/2; i++) {
// swap element [i] with element [pos-i+1]
spare = pancakes[i];
pancakes[i] = pancakes[pos-i+1];
pancakes[pos-i+1] = spare;
}
}
翻转(3)仅交换[1]和[3],[2]保持原位
flip(4)将交换[1]和[4]然后交换[2]和[3]