120 - Stacks of Flapjacks
2013-12-28 23:54
363 查看
题目:120 - Stacks of Flapjacks
题目大意:将栈里的数依靠队列实现从栈顶到栈底的数从小到大
解题思路:从栈底往上判断看依次是否为相对最大的数,是就不需要靠队列来翻转,不是的话就看这个相对大的数是否在栈顶,是的话就用队列反转,并记下翻转的位置,如果不在栈顶,就把这个数反转到栈顶,在进行上述的那个操作,知道所有的数都从小到大的排列在栈里面。
注意:栈和队列的性质,栈要从从栈顶取数,所以反转一定是某一处到栈顶之间的数,不要随意的反转。
还有scanf() 函数是以回车结束但是本身是可以接受回车的。
题目大意:将栈里的数依靠队列实现从栈顶到栈底的数从小到大
解题思路:从栈底往上判断看依次是否为相对最大的数,是就不需要靠队列来翻转,不是的话就看这个相对大的数是否在栈顶,是的话就用队列反转,并记下翻转的位置,如果不在栈顶,就把这个数反转到栈顶,在进行上述的那个操作,知道所有的数都从小到大的排列在栈里面。
注意:栈和队列的性质,栈要从从栈顶取数,所以反转一定是某一处到栈顶之间的数,不要随意的反转。
还有scanf() 函数是以回车结束但是本身是可以接受回车的。
#include<stdio.h> #include<string.h> int const N = 35; int a , n = 0, pos ; void reserve(int i) { int tmp, j; for( j = 0; j <= i /2 ; j++) if(j != i - j) { tmp = a[j]; a[j] = a[i - j]; a[i - j] = tmp; } } int findmax(int i) { int max = i; for ( int j = 0; j <= i; j++) { if(a[max] < a[j]) max = j; } return max; } int main() { int j, k, p; char ch; memset(a, 0, sizeof(a)); while(scanf("%d%c", &a , &ch) != EOF ) { if(ch == '\n' ) { for(j = 0; j <=n; j++) { if(j == n) printf("%d\n", a[j]); else printf("%d ", a[j]); } for(j = n, k = 0 ; j >= 0; j--) { while(1) { p = findmax(j); if(p != j) { if(p == 0) { pos[k++] = j; reserve(j); } else { pos[k++] = p; reserve(p); } } else break; } } for (j = 0; j < k; j++) printf("%d ", n - pos[j] + 1); printf("0\n"); n = 0; memset(a, 0, sizeof(a)); } else n++; } return 0; }
相关文章推荐
- bda驱动学习笔记
- Selenium自动化测试实践 公开班(广州)
- 基本控件文档-UIView属性---iOS-Apple苹果官方文档翻译
- iBatis核心框架浅析
- 【LeetCode】Single Number
- Selenium自动化测试实践 公开班(广州)
- Click ListView Item跳转Activity
- 什么是增量检查点?
- 基本控件文档-UITextField属性---iOS-Apple苹果官方文档翻译
- 一段使用 FreeType 在控制台打印字符的 C++ 代码
- JavaScript正则表达式下——相关方法
- Qt学习之_01环境准备_Qt安装、Git安装、QtCreator配置
- 丑数(humble number) hdu 1058 DP
- 视频笔记
- Android动画进阶—使用开源动画库nineoldandroids
- java代码--------打印三角形
- JavaScript 正则表达式上——基本语法
- javascript中window.showModalDialog的使用以及windows.open使用整理
- IOS中如何实现对话聊天
- ListBox的虚拟可视化技术