UVA-120 煎饼 题解答案代码 算法竞赛入门经典第二版

GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版

非常简单的一道题目。题目要求对序列排序。但是每次的操作只能是翻转从该元素到顶部元素的子序列。于是我们找到最大元素,然后首先翻转一次到顶部。然后再翻转一次就到底部了。然后再对上面n-1个元素继续这个过程。

AC代码

cpp 复制代码
#include <stdio.h>

int arrOrigin[35];
int len;
int arr[35];
int stepArr[70];
int stepLen;

int findMax(int i)
{
    int maxi = i;
    for (int j = i - 1; j >= 0; --j)
    {
        if (arr[j] > arr[maxi])
            maxi = j;
    }
    return maxi;
}

void flip(int i)
{
    int t;
    for (int j = 0; j <= i / 2; ++j)
    {
        t = arr[j];
        arr[j] = arr[i - j];
        arr[i - j] = t;
    }
}

void loop()
{
    int i, maxi;
    for (i = len - 1; i > 0; --i)
    {
        maxi = findMax(i);
        if (maxi == i)
            continue;
        if (maxi != 0)
        {
            flip(maxi);
            stepArr[stepLen++] = maxi;
        }
        flip(i);
        stepArr[stepLen++] = i;
    }
}

int main()
{
    int i;
    while (1)
    {
        len = 0;
        while (scanf("%d", &arrOrigin[len]) > 0)
        {
            arr[len] = arrOrigin[len];
            ++len;
            if (getchar() == '\n')
                break;
        }
        if (len == 0)
            return 0;
        stepLen = 0;
        loop();
        for (i = 0; i < len; ++i)
        {
            if (i != 0)
                putchar(' ');
            printf("%d", arrOrigin[i]);
        }
        putchar('\n');
        for (i = 0; i < stepLen; ++i)
            printf("%d ", len - stepArr[i]);
        putchar('0');
        putchar('\n');
    }
    return 0;
}
相关推荐
小π军10 分钟前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司19 分钟前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
a187927218311 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记1 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Logic1011 小时前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题
老赵的博客1 小时前
c++面试之从虚函数表到Rtti一次性讲清楚
c++·qt
Navigator_Z1 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
wzdark2 小时前
基于链表的内存池设计与内存复用机制4
java·数据结构·链表
wzdark2 小时前
多维数组在算法设计中的存储映射问题4
算法
傲世仙尊2 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++