UVA 120-Stacks of Flapjacks
题目大意:给出数列, 一次让第一个数到第i个数全部翻转,把数列从小到大排序
解题思路:把前i个的最大数先移动到第一位,然后移动到最后一位
#include <stdio.h>
#include <iostream>
using namespace std;
void turn(int *a, int n, int x) {
int b[1000];
int j = 0;
for(int i = x; i >= 0; i--) {
b[j] = a[i];
j++;
}
for(int i = x + 1; i < n; i++) {
b[j] = a[i];
j++;
}
for(int i = 0; i < n; i++) {
a[i] = b[i];
}
printf("%d " ,n-x);
}
int main() {
int a[1000];
while(scanf("%d", &a[0]) != EOF) {
int n = 1;
if(getchar() != '\n') {
while(1) {
scanf("%d", &a[n]);
n++;
if(getchar() == '\n')
break;
}
}
printf("%d", a[0]);
for(int i = 1; i < n; i++)
printf(" %d", a[i]);
printf("\n");
int s = 0;
for(int i = n - 1; i >= 0; i--) {
int max = 0;
if(i == 0)
break;
for(int j = 0; j <= i; j++)
if(a[j] > a[max])
max = j;
if(max == 0)
turn(a, n, i);
else if(max != i) {
turn(a, n, max);
i++;
}
}
printf("%d\n",0);
}
return 0;
}