就是给出一堆煎饼,从某个位置插进去,然后从个位置以上的所有煎饼都倒置。问从哪几个位置插进去之后,煎饼变成从小到大排。。
思路就是找到最大的那个,翻一下变到第一位,在从底下翻一下就变成最下面了,然后找第二大的。。
AC代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int num[50];
int temp[50];
int max(int nu) {
int p,max = 0;
for(p = 0 ; p <= nu ; p++)
max=( max > num[p]) ? max : num[p];
for(p = 0 ; p <= nu ;p++) {
if(num[p] == max)
return p;
}
}
void change(int nu) {
for( int i = 0 , j = nu ; i <= nu / 2;i++,j--) {
int tmp;
tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
}
int main() {
int nu,pos = 0;
char c;
while(scanf("%d%c",&nu,&c) != EOF) {
num[pos] = nu;
temp[pos] = nu;
if(c == '\n') {
int i ,j;
for(i = 0 ; i <= pos ; i++) { //原样输出
printf("%d",num[i]);
if(i != pos)
printf(" ");
}
printf("\n");
sort( temp , temp + pos + 1);
for( i = 0 ; i <= pos ; i++) {
if(num[pos - i] != temp[ pos - i]) {
j = max(pos - i);
if (j != pos - i) {
change(j);
if(j!=0)
printf("%d ",pos - j + 1);
change ( pos - i );
printf("%d ",i + 1);
}
}
}
printf("0\n");
pos = 0;
}
else
pos++;
}
}