煎饼排序 (Stacks of Flapjacks, Uva 120)

Python pancake sort煎饼排序算法详解及源码 煎饼排序算法(Pancake Sort)是一种简单的排序算法,它通过翻转数组的元素来完成排序。它的基本思想是将最大的元素翻转到数组的最前面,然后再将整个数组翻转,使得最大的元素移至数组的最后面。重复这个过程直到整个数组有序。 阅读详情

Stacks of Flapjacks的题目详见Uva 120。解法类似与插入排序,每次找未排好序列中数字最大的煎饼并将其翻至锅顶,然后将全部未排序的序列翻转。这样就排好了一个数字。

因为STL vector里面已经有max_element()和reverse(),所以直接用STL会比较方便。注意reverse里面的第二个元素是基于vector.end(),它是最后一个元素的后一个元素,所以如果第二个元素不是end()而是某个具体元素的指针的话,要加1。否则出错。

程序如下:

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>

using namespace std;

void FlapjackSort(vector<int> &fj) {
    int n = 0;
    vector<int>::iterator iter = fj.begin();

    while(iter!=fj.end()) {
        cout<<endl<<"n=";
        vector<int>::iterator maxFj = max_element(fj.begin(), fj.end()-n);
        reverse(fj.begin(), maxFj+1);
        cout<<endl<<" ";
        for_each(fj.begin(), fj.end(), [](int i)->void {std::cout << i <<" ";});
        reverse(fj.begin(), fj.end()-n);
        cout<<" ";
        for_each(fj.begin(), fj.end(), [](int i)->void {std::cout << i <<" ";});

        n++;
        iter=fj.begin()+n;
    }

}

int main()
{
    int flapjacks[8] = {2,5,7,6,4,8,11,4};
    vector<int> fj;

    for (int i=0; i<sizeof(flapjacks)/sizeof(flapjacks[0]); i++) {
        fj.push_back(flapjacks[i]);
    }
    cout<<"original flapjacks"<<endl;
    for_each(fj.begin(), fj.end(), [](int i)->void {std::cout << i <<" ";});
    cout<<endl;

    FlapjackSort(fj);

    cout<<endl<<"after sorting"<<endl;
    for_each(fj.begin(), fj.end(), [](int i)->void {std::cout << i <<" ";});

    return 0;
}

程序输出如下:
original flapjacks
2 5 7 6 4 8 11 4

n=0
11 8 4 6 7 5 2 4 4 2 5 7 6 4 8 11
n=1
8 4 6 7 5 2 4 11 4 2 5 7 6 4 8 11
n=2
7 5 2 4 6 4 8 11 4 6 4 2 5 7 8 11
n=3
6 4 4 2 5 7 8 11 5 2 4 4 6 7 8 11
n=4
5 2 4 4 6 7 8 11 4 4 2 5 6 7 8 11
n=5
4 4 2 5 6 7 8 11 2 4 4 5 6 7 8 11
n=6
4 2 4 5 6 7 8 11 2 4 4 5 6 7 8 11
n=7
2 4 4 5 6 7 8 11 2 4 4 5 6 7 8 11
after sorting
2 4 4 5 6 7 8 11
Process returned 0 (0x0) execution time : 0.087 s
Press any key to continue.

看来用STL虽然方便,可是太慢了(可能是涉及到iterator的关系?),直接用写函数max()和reverse()可能快些。

煎饼排序(c++)1 第一次翻转后(k = 4):arr = [1, 4, 2, 3] 第二次翻转后(k = 2):arr = [4, 1, 2, 3] 第三次翻转后(k = 4): 立即下载

相关推荐

东华大学oj系统 39 最大乘积

39 最大乘积 作者: Turbo时间限制: 1S章节: 深度优先搜索 问题描述 : 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入说明 : 第一行一个数表示数据组数   每组输入数据共2行:   第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,   第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。 输出说明 : 每组数据输出1行,为最大的乘积。 输入范例 : 1 5 5 1 2 3 4 2 输出范例 : 48 注:难

weixin_50336369的博客 528

煎饼排序

煎饼排序指的是将大小不同的一摞煎饼(一个煎饼放在另一个煎饼上堆起来),按大小排序的数学问题,其中的操作是,只能用煎饼铲子从任意位置插入,铲起上方全部煎饼并翻面。学术化一点,就是只能把插入位置之前的数组翻转的排序方法–“前序翻转排序”。 这个问题我也是偶然看到知乎上讨论比尔盖茨的话题中了解到的。说他找到了更好的方法。一般来说煎饼排序最多要翻 2*n 次,但是他找到了最多翻(5n+5)/3 次的方法。...

Aiven 2098

FCN---训练cityspaces

未经允许,不要随意转载! 最近想试试用FCN训练自己的数据集,想想标注是一件很费劲的事,于是就想到了用其他库里的数据,这里选用了cityspaces,默认已经配置好FCN. 1、下载cityspaces https://www.cityscapes-dataset.com/ 需要注册一个账号 cityspaces包含2...

wangyu088的专栏 2035

【递归】969. 煎饼排序

【递归】969. 煎饼排序

qq_44653420的博客 697

python特征选择pso_【来点干货】机器学习中常用的特征选择方法及非常详细的Python实例...

花费了很长时间整理编辑,转载请联系作者授权,违者必究。特征选择(Feature selection)是在构建预测模型的过程中减少输入变量的一个过程。它是机器学习中非常重要的一步并在很大程度上可以提高模型预测精度。这里我总结了一些机器学习中常见的比较有用的特征选择方法并附上相关python实现code。希望可以给大家一些启发。首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常...

weixin_39927158的博客 1164

在LinuxMint 22.1(Ubuntu24.04)上安装使用同花顺远航版

Linux用户成功在LinuxMint22.1系统上通过Wine9.0运行同花顺远航版,解决了长期困扰的股票行情软件问题。此前Linux原生版同花顺功能简陋且停止更新,Wine版通达信存在显示问题。作者作为自由软件支持者,通过调整Wine配置文件解决了高分屏显示异常问题,实现了远航版的正常使用。期待同花顺能重启Linux原生版开发,支持更多处理器架构,完善国产软件生态。该方案为Linux股票软件用户提供了实用参考。

5141

【提高】小 X 与煎饼达人(flip) c++

共有 10 块煎饼, 开始时状态为“反反反反反反反反反反”, 第一次操作将区间[1,8] 的煎饼翻个身, 状态变成“ 正正正正正正正正 反反”, 红色表示翻的区间。小 X 顿时食指大动, 赶紧走上前去细细打量, 发现此人做煎饼还十分的讲究,在做的过程中,大叔每次会将从第 x 块煎饼开始到第 y 块煎饼结束的这 y-x+1 块煎饼全部翻个个儿(正面翻到反面, 反面翻到正面)。对于另外 30% 的数据, 1 ≤ n ≤ 1000000,1 ≤ m ≤ 100000, x = 1, 1 ≤ y ≤ n。

zhanghexuan2013的博客 877

【深度学习总结_02】在自己的数据集微调SAM

使用医疗影像数据微调SAM

qq_41234663的博客 1万+

LeetCode 969.煎饼排序

文章目录题目解题思路代码实现复杂度分析Reference 题目 解题思路 煎饼问题相关背景可参考百度百科:煎饼排序 核心思想:通过翻转把序列的最大值依次移动到数组尾部 对于下标为indexindexindex的元素,可以通过两次煎饼排序将其放到尾部: 第一步:反转子数组arr[0,index]arr[0, index]arr[0,index],此时该元素被放至首部 第二步:反转arr[0,n−1]arr[0,n-1]arr[0,n−1],nnn为数组arrarrarr的长度,即反转整个数组,此时

xylitolz的博客 504

基于深度学习的三维重建算法——详解与实现

随着深度学习技术的迅猛发展,基于深度学习的三维重建算法在最近几年取得了显著的进展。而基于深度学习的三维重建算法通过利用深度神经网络,能够从大规模数据中学习到更准确、鲁棒的三维结构表示。本文综述了基于深度学习的三维重建算法,并给出了相应的源代码。随着深度学习技术的不断发展,我们相信基于深度学习的三维重建算法将会在未来得到更广泛的应用。实验结果表明,基于深度学习的三维重建算法在准确性和鲁棒性方面取得了显著的提升。以上是关于基于深度学习的三维重建算法的详细介绍与实现,希望对您有所帮助。

CyberGenius的博客 1229

29、网络支持技术:CDN、覆盖网络与无标度网络解析

本文详细解析了CDN路由方式与性能指标,探讨了覆盖网络与无标度网络的特性及其在云计算和现代网络中的应用。文章分析了CDN的关键技术与挑战,介绍了覆盖网络与小世界网络的基本原理,并深入讨论了无标度网络的构建算法、性能优化策略以及在多个领域的应用案例。最后,文章展望了未来网络技术发展趋势与无标度网络的结合潜力。

night的博客 91

Stacks of Flapjacks(翻煎饼) UVA - 120 (贪心 排序)

堆栈和队列通常被认为是数据结构的面包和黄油,可用于体系结构、解析,操作系统和离散事件模拟。堆栈在形式语言理论中也很重要。 现在的问题涉及黄油和煎饼(而不是面包),同时还有一个根据唯一但完整的规则来翻煎饼的服务器。 给你一栈的煎饼,请你编写一个程序用于指示这个栈如何被排序以使得最大的煎饼在最下面而最小的煎饼在最上面。 煎饼的直径将被给出。 栈中的所有煎饼的直径都不一样。 对栈排序是通过一系列"翻...

Suprit's blog 945

基于STM32设计的智能水产养殖系统(2025)_359

本设计提出并实现了一种基于STM32F103RCT6微控制器的智能水产养殖控制系统,针对传统水产养殖中人工依赖高、环境参数监测滞后、控制手段单一等问题,集成了TDS水质检测、水温检测、水位监测、自动喂食、自动充氧、换水控制与加热保温等功能。系统采用ESP8266模块实现WIFI联网,通过MQTT协议将关键数据上传至华为云物联网平台,支持Android手机APP和Windows上位机远程监测与控制。同时,系统具备本地LCD数据显示与蜂鸣器异常报警功能,支持本地按键控制操作。整套系统功能完善,响应灵敏,运行稳定

626

排序综合-UVA120 煎饼 Stacks of Flapjacks题解(采用STL)

一、算法分析 首先看到这个题,就要想到对子序列进行排序的做法。那么解题思路就比较清晰了,即先找到子序列,再用题上特有的操作(翻面法),将子序列排序。具体做法如下例所示: 2 4 1 5 3 6 5 1 4 2 3 6 3 2 4 1 5 6 4 2 3 1 5 6 1 3 2 4 5 6 3 1 2 4 5 6 2 1 3 4 5 6 1 2 3 4 5 6 分析:①将数组进行排序,本例排序结果为...

numb_ac的博客 274

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

UVa 120 Stacks of Flapjacks 摞煎饼 - 插入排序

题意是给定一摞煎饼,每个煎饼有权值,然后你需要通过一些操作使得煎饼从上到下按照权值从小到大排序。而对于操作的解释如下: ->对于一摞煎饼可以选择其中的一个使得当前煎饼和之上的所有煎饼上下翻转,例如1,2,4,3变为3,4,2,1。 输出:每次选择的煎饼编号,编号从上到下依次为n,n-1… N.B. Special Judge 《lrj紫书》例8-1思考插入排序的过程,

x_1023的博客 356

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

UVa 120 Stacks of Flapjacks

题目要求模拟煎饼叠排序过程,通过翻转操作将煎饼按直径从小到大排列(顶部最小,底部最大)。每次翻转操作将指定位置及以上的煎饼顺序反转。解题采用贪心策略:从最大煎饼开始,依次将其翻转到目标位置。算法时间复杂度为O(n²),适用于最多30个煎饼的情况。输入为一行煎饼直径,输出原始叠和翻转步骤(以0结尾)。代码通过排序和标记位置实现翻转操作,确保每次最多两次翻转即可将一个煎饼归位。

寂静山林 965

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

洛谷-UVA120 煎饼 Stacks of Flapjacks

输入格式 输出格式 题意 给你一迭薄煎饼,请你写一个程式来指出要如何安排才能使这些薄煎饼由上到下依薄煎饼的半径由小到大排好。所有的薄煎饼半径均不相同。 要把薄煎饼排好序需要对这些薄煎饼做翻面(flip)的动作。方法是以一抹刀插入一迭薄煎饼中,然后做翻面的动作(也就是说在抹刀上面的薄煎饼经翻面后,会依相反的次序排列)。若一迭共有n个薄煎饼,我们定义最底下的薄煎饼的位置为1,最上面的薄煎饼位置为...

zqhf123的博客 552

UVa120 例题 8-1 煎饼 (Stacks of Flapjacks)

原题链接: UVa-120 参考博客: http://www.cnblogs.com/devymex/archive/2010/08/15/1799844.html 题目大意:   有N张正在锅里的一叠煎饼,每张都有一个数字,代表其直径大小。厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即原来在上面的煎饼现在到了下面。要求设计一种方法使得所有煎饼按照从小到大排

Miracle42的博客 1486

UVa 120 Stacks of Flapjacks 【排序】

题目链接:UVa 120 Stacks of FlapjacksDescription:Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, operating systems, and discrete event s

咸鱼の小窝 452

UVa Problem 120 Stacks of Flapjacks (煎饼堆)

// Stacks of Flapjacks (煎饼堆) // PC/UVa IDs: 110402/120, Popularity: B, Success rate: high Level: 2 // Verdict: Accepted // Submission Date:

寂静山林 2625

UVa OJ 120 - Stacks of Flapjacks

UVa OJ 120 - Stacks of FlapjacksProblem  有一叠煎饼正在锅里。煎饼共有n(n≤30)张,每张都有一个数字,代表它的大小,如 图8-11所示。厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即 原来在上面的煎饼现在到了下面。   设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小)。输入时,各个煎 饼按照从上到下的顺序给出。 In

Yuuki_Dach's Blog 525

第四十题 UVA120 煎饼 Stacks of Flapjacks

题意翻译 给你一迭薄煎饼,请你写一个程式来指出要如何安排才能使这些薄煎饼由上到下依薄煎饼的半径由小到大排好。所有的薄煎饼半径均不相同。 要把薄煎饼排好序需要对这些薄煎饼做翻面(flip)的动作。方法是以一抹刀插入一迭薄煎饼中,然后做翻面的动作(也就是说在抹刀上面的薄煎饼经翻面后,会依相反的次序排列)。若一迭共有n个薄煎饼,我们定义最底下的薄煎饼的位置为1,最上面的薄煎饼位置为n。当抹刀插入位置为...

苦鬼·。 273

翻煎饼(Stacks of Flapjacks)-蓝桥杯练习

Stacks of Flapjacks UVA - 120 堆栈和队列通常被认为是数据结构的面包和黄油,可用于体系结构、解析,操作系统和离散事件模拟。堆栈在形式语言理论中也很重要。 现在的问题涉及黄油和煎饼(而不是面包),同时还有一个根据唯一但完整的规则来翻煎饼的服务器。 给你一栈的煎饼,请你编写一个程序用于指示这个栈如何被排序以使得最大的煎饼在最下面而最小的煎饼在最上面。 煎饼的直径将被给出。 ...

小小风的博客 1732

UVa 120 煎饼(Stacks of Flapjacks)

题意: 想象自己在翻煎饼,翻到最后最下面的值是最大的,最上面是最小的 代码: #include<bits/stdc++.h> #define LL long long #define ms(s) memset(s, 0, sizeof(s)) using namespace std; const int maxn = 50; int a[50]; int b[50]; bool cm...

Inuyasha__的博客 230

uva 120 Stacks of Flapjacks(检索)

Stacks of Flapjacks  Background Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, operating systems, and discr

不慌不忙、不急不躁 1539

Stacks of Flapjacks UVA - 120 煎饼 构造法

题目:https://vjudge.net/problem/UVA-120 【分析】 这道题目要求排序,但是基本操作却是“颠倒一个连续子序列”。不过没有关系,我们还是可以按照选择排序的思想,以从大到小的顺序依次把每个数排到正确的位置。方法是先翻到最上面,然后翻到正确的位置。由于是按照从大到小的顺序处理,当处理第i大的煎饼时,是不会影响到第1, 2, 3,…, i-1大的煎饼的(它们已经正确地翻到...

Nicolas的博客 381
上一篇: 区间相关问题的学习: 最多不相交区间问题,区间选点问题与区间覆盖问题
下一篇: 滑动窗口的实例学习 (Unique snowflakes, Uva 11572)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值