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;
}
相关推荐
Ivanqhz22 分钟前
刚体的自由度
人工智能·算法
KaMeidebaby40 分钟前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
Yang_jie_031 小时前
笔记:数据结构(栈是否使用底指针以及头指针的初始化值)
数据结构·笔记·算法
aaPIXa6222 小时前
C++采样引导优化SPGO——比PGO更智能的编译器决策新方案
java·c++·人工智能
2301_800895102 小时前
信息安全数学基础复习
算法
爱折腾的小黑牛2 小时前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法
Starmoon_dhw2 小时前
题解:P17078 夏日甜点
c++·学习·算法·图论
某不知名網友2 小时前
C/C++动态内存管理,智能指针及RAlI思想。
java·c语言·c++
海石3 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
hold?fish:palm3 小时前
从源码到可执行文件:C++程序的编译过程
开发语言·c++