UVA - 120 Stacks of Flapjacks
2014-10-30 22:11
447 查看
题目大意:给出一叠煎饼,要求从小达到大排序,排序的时候只能截取子串,然后将子串的倒序。
解题思路:先将输入的值按从小到大排序,然后进行对比,用原数组和排完序后的对比,从最后一个开始对比,如果发现不同的话,就找到那个值,将其翻转到第一个,然后在翻转到原有的位置上即可,这样的话就不会影响到后面的煎饼了
解题思路:先将输入的值按从小到大排序,然后进行对比,用原数组和排完序后的对比,从最后一个开始对比,如果发现不同的话,就找到那个值,将其翻转到第一个,然后在翻转到原有的位置上即可,这样的话就不会影响到后面的煎饼了
#include<cstdio> #include<algorithm> using namespace std; int num[1000]; int number[1000]; int out[1000] = {0}; int maxn[1000] = {0}; int main() { char ch; while(scanf("%d",&num[1]) != EOF) { number[1] = num[1]; maxn[1] = num[1]; int count = 2; while( (ch = getchar() ) != '\n' ) { scanf("%d", &num[count]) ; number[count] = num[count]; maxn[count] = num[count]; count++; } int cnt = 1; sort(maxn+1,maxn+count); // i表示最底层的那个煎饼 for(int i = count-1; i >= 1; i--) if(maxn[i] != num[i]) {// 最后一个不等于当前的值 int j; for(j = i - 1; j >= 1; j--)//找到最后一个所在的位置 if(num[j] == maxn[i]) break; int temp; if(j != 1) { //如果最后一个不在最顶层,将其弄到最顶层 out[cnt++] = count - j; for(int k = 0; k < j / 2; k++) { temp = num[k+1]; num[k+1] = num[j-k]; num[j-k] = temp; } } for(int k = 0; k < i / 2 ; k++) { int temp; temp = num[k+1]; num[k+1] = num[i-k]; num[i-k] = temp; } out[cnt++] = count - i; } for(int i = 1 ; i < count - 1; i++) printf("%d ",number[i]); printf("%d\n",number[count-1]); for(int i = 1; i < cnt; i++) printf("%d ",out[i]); printf("%d\n",out[0]); } return 0; }
相关文章推荐
- UVa 120 - Stacks of Flapjacks
- UVA 120 Stacks of Flapjacks (STL deque&reverse)
- UVa 120 (构造) Stacks of Flapjacks
- UVa 120 - Stacks of Flapjacks 解题报告(暴力)
- 【UVa120】Stacks of Flapjacks 模拟
- UVa 120 - Stacks of Flapjacks (排序)
- UVa 120 - Stacks of Flapjacks
- UVA 120 - Stacks of Flapjacks
- Uva - 120 - Stacks of Flapjacks
- Stacks of Flapjacks UVA - 120
- UVA 120 - Stacks of Flapjacks
- uva120 stacks of flapjacks
- UVa - 120 - Stacks of Flapjacksh
- Uva - 120 - Stacks of Flapjacks
- UVa120 Stacks of Flap jacks
- UVA - 120 Stacks of Flapjacks
- uva 120 stacks of flapjacks ——yhx
- UVA 120 Stacks of Flapjacks 煎饼
- Uva120——Stacks of Flapjacks
- UVa120 Stacks of Flapjacks