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; } } }
相关文章推荐
- Ajax调用restful接口传送Json格式数据的方法
- UVA - 156 Ananagrams
- 聊天室总结
- Node.js 全局对象
- Brew error: Could not symlink, path is not writable
- MySQL5.6 报错1067
- UVA - 465 Overflow
- 面向对象七大设计原则
- 哈夫曼树、哈夫曼编码——哈哈,至少你要了解一下原理吧
- 大盘鸡的做法
- IP178G交换机启动失败的症状
- HDU 3866 Moonfang's Birthday(贪心)
- 简化Saiku可视化面板(二)
- IIC vs SPI
- RedHat Linux安装Informix v10.x(图文详解)
- C++的s输出
- 工具使用-maven跳过测试用例
- [Leetcode]101. Symmetric Tree
- c#新手入门级代码分享 在类进行实例化的时候初始化字段
- 用分支限界法解决人员安排问题(Personnel assignment problem)