您的位置:首页 > 其它

UVA - 120 Stacks of Flapjacks

2016-07-09 15:18 330 查看

UVA - 120 Stacks of Flapjacks

题目大意。给一组栈 要求 栈底的数最大一次往上, 并且该栈进行排序时 只可翻转 例如 1 3 2 5 4 翻转变成 4 5 2 3 1 或者 5 2 3 1 4 以此类推

解题思路: 先排定是否 最后一个数字是不是 最大的 是跳过 判断倒数第二个 不是的 话 去 寻找 最大的数的位置(如果该数是第一位的话 则跳过该步骤) 从这个位置 进行翻转 翻转完 最大的数 就变成了第一位 输出翻转的位置(注:位置是倒过来数的)再一次整个翻 即可到 最后面(如果不是要翻到最后一位 那就整个翻转你所需要的位数即可)输出翻转的位置

最后在输入个 “0\n”即可

#include <cstdio>
int main() {
int a[1000];
char c;
int r = 0;
int flag = 0;
int max = 0;
while(scanf("%d%c", &a[r], &c) == 2) {
r++;
if ( c == '\n') {
for (int i = 0; i < r; i++)
printf("%d ", a[i]);
printf("\n");
for (int i = r - 1; i > 0; i-- ) {
flag = 1;
for (int j = 0; j < i; j++ ) {
if ( a[i] < a[j]) {
flag = 0;
break;
}
}
if (!flag) {
for (int j = 0; j < i; j++ ) {
for (int k = 0; k < i; k++) {
flag = 1;
if ( a[j] < a[k] ) {
flag = 0;
break;
}
}
if (flag) {
if ( j != 0) {
printf ("%d ", r - j);
for (int k = j; k > j/2; k--) {
int t = a[k];
a[k] = a[j - k];
a[j - k] = t;
}
}
printf("%d ", r - i) ;
for (int k = i; k > i/2; k--) {
int t = a[k];
a[k] = a[i - k];
a[i - k] = t;
}
break;

}
}
}
}
printf("0\n");
r = 0;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: