题意:有N张正在锅里的一叠煎饼,每张都有一个数字,代表其大小。厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即原来在上面的煎饼现在到了下面。要求设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小)。

解法:基本操作就是颠倒一个连续子序列。既然没有限制什么其他的条件,就一个个完成好了。把最大的移到最上面,再移到最下面;再是第二大、第三大等等......

P.S.而我实在是太搞笑了!echo输入我直接忽略了。。自己打的比紫书上的标程长了将近一倍,还错了。。因此,要注意数据比较小,可以for一遍找第i大的就好了,别离散化什么的。

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6
7 int n;
8 int a[35];
9
10 int findmax(int x)
11 {
12 int p=1;
13 for (int i=x;i>1;i--)
14 if (a[i]>a[p]) p=i;
15 return p;
16 }
17 int sswap(int x,int y) {int t;t=a[x],a[x]=a[y],a[y]=t;}
18 void flip(int x)
19 {
20 for (int i=1;i<=x/2;i++) sswap(i,x-i+1);
21 printf("%d ",n-x+1);
22 }
23 int main()
24 {
25 while (scanf("%d",&a[1])!=EOF)
26 {
27 n=1;char ch;
28 while (1)
29 {
30 ch=getchar();
31 if (ch!=' ') break;
32 scanf("%d",&a[++n]);
33 }
34 for (int i=1;i<=n;i++) printf("%d ",a[i]);
35 printf("\n");
36 for (int i=n;i>1;i--)
37 {
38 int p=findmax(i);
39 if (p==i) continue;
40 if (p!=1) flip(p);
41 flip(i);
42 }
43 printf("0\n");
44 }
45 return 0;
46 }

最新文章

  1. MySQL动态游标
  2. 关于node.js和npm,cnpm的安装记录以及gulp自动构建工具的使用
  3. AI (Adobe Illustrator)详细用法(一)
  4. java注解Annotation
  5. Oracle 课程八之跟踪事件set event
  6. MySQL高效分页解决方案集
  7. easyui源码翻译1.32--DateTimeBox(日期时间输入框)
  8. Activiti 5.16用户手册
  9. bzoj 2542: [Ctsc2001]终极情报网 费用流
  10. DirectFB的架构介绍
  11. 6.function自定义插件的方法和使用
  12. 4.2 js没有块级作用域
  13. EBS开发技术之Patch安装
  14. Spark2.1.0——运行环境准备
  15. Jupyter notebook工具栏隐藏和jupyter notebook主题更改
  16. 详解Oracle partition分区表
  17. SpringBoot鸡汤(注解集合二)
  18. CSS技巧:逐帧动画抖动解决方案
  19. 【问题收录】Ubuntu14.04连接两个双显示器失败的解决方案
  20. python的分支循环

热门文章

  1. 【Linux】ssh远程连接到指定ip的指定用户上
  2. 电子邮箱、邮件地址、网站地址正则表达式!几个有用的RE、regex、regexp!
  3. buuctf—web—高明的黑客
  4. Netty中使用的设计模式
  5. Kubernetes CoreDNS 状态是 CrashLoopBackOff 报错
  6. 入门OJ:八中生成树2
  7. k8s-jenkins持续发布tomcat项目
  8. 【Windows】Win10家庭版启用组策略gpedit.msc
  9. 设置一个两边固定中间自适应的css
  10. Bitter.Core系列四:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例 查询