HDU1020——Encoding,HDU1021——Fibonacci Again,HDU1022——Train Problem I

目录

HDU1020——Encoding

题目描述

运行代码

代码思路

HDU1021——Fibonacci Again

题目描述

运行代码

代码思路

HDU1022——Train Problem I

题目描述

运行代码

代码思路

HDU1020——Encoding

题目描述

Problem - 1020

运行代码

#include <iostream>
#include <string>
using namespace std;
int main() {
    int k;
    cin >> k;
    while (k--) {
        string c;
        cin >> c;
        int j = 1;
        for (size_t i = 0; i < c.size(); ++i) {
            if (i + 1 < c.size() && c[i] == c[i + 1]) {
                j++;
            }
            else {
                if (j == 1) {
                    cout << c[i];
                }
                else {
                   cout << j << c[i];
                }
                j = 1;
            }
        }
        cout << '\n';
    }
    return 0;
}

代码思路

  1. 读取测试用例数量:首先,代码读取一个整数k,表示将要处理的字符串数量。

  2. 处理每个测试用例:对于每一个字符串,执行以下操作:

    • 读取一个字符串c
    • 初始化一个计数器j,用于记录当前字符的连续重复次数。
    • 使用一个for循环遍历字符串中的每个字符。
      • 如果当前字符与下一个字符相同,增加计数器j
      • 否则,如果当前字符与下一个字符不同:
        • 如果计数器j等于1,说明字符没有重复,直接输出该字符。
        • 否则,输出计数器j和当前字符,表示字符重复的次数和字符本身。
        • 重置计数器j为1,准备计数下一个字符的重复次数。
    • 完成一个字符串的处理后,输出一个换行符\n,以便区分不同的字符串输出。

HDU1021——Fibonacci Again

题目描述

Problem - 1021

运行代码

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int FN(int n) {
    if (n == 0)
        return 7;
    if (n == 1)
        return 11;
    int a = 7, b = 11, c;
    for (int i = 2; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
    }
    return b;
}
int main() {
    int n;
    while (cin >> n) {
        int num = FN(n);
        if ((n-2)%4==0) {
            cout << "yes" << endl;

        }
        else {
            cout << "no" << endl;
        }
    }
    return 0;
}

代码思路

  1. FN函数:这个函数实现了斐波那契数列的一个变体。斐波那契数列通常定义为F(0)=0, F(1)=1,之后每一项都是前两项的和。但在这个变体中,起始的两个数分别是711,即FN(0)=7FN(1)=11,之后每一项FN(n)等于FN(n-1)+FN(n-2)

  2. 主函数 main

    • 主函数首先读取一个整数n,这个n代表了想要查询的斐波那契变体数列的第n项。
    • 然后调用FN(n)函数计算该数列的第n项的值。
    • 接下来,代码检查n-2是否能被4整除(即(n-2) % 4 == 0),如果成立,则输出yes,否则输出no

根据FN函数推断出n的规律,进行总结归纳。

HDU1022——Train Problem I

题目描述

Problem - 1022

运行代码

#include <iostream>
#include <stack>
#include <string>
using namespace std;

bool Trains(const string& inOrder, const string& outOrder) {
   stack<int> station;
    int inIndex = 0, outIndex = 0;

    while (outIndex < outOrder.size()) {
        if (!station.empty() && station.top() == outOrder[outIndex] - '0') {
            station.pop();
            outIndex++;
        }
        else if (inIndex < inOrder.size()) {
            station.push(inOrder[inIndex] - '0');
            inIndex++;
        }
        else {
            return false;
        }
    }

    return station.empty();
}

void Steps(const string& inOrder, const string& outOrder) {
    stack<int> station;
    int inIndex = 0, outIndex = 0;

   cout << "Yes." << endl;

    while (outIndex < outOrder.size()) {
        if (!station.empty() && station.top() == outOrder[outIndex] - '0') {
            cout << "out" << endl;
            station.pop();
            outIndex++;
        }
        else if (inIndex < inOrder.size()) {
          cout << "in" << endl;
            station.push(inOrder[inIndex] - '0');
            inIndex++;
        }
    }

    cout << "FINISH" << endl;
}

int main() {
    int num;
    string inOrder, outOrder;

    while (cin >> num >> inOrder >> outOrder) {
        if (Trains(inOrder, outOrder)) {
            Steps(inOrder, outOrder);
        }
        else {
            cout << "No." <<endl << "FINISH" << endl;
        }
    }
    return 0;
}

代码思路

  1. Trains 函数:此函数用于检查是否能够按照给定的出站顺序(outOrder)让所有火车出站。它使用一个栈station来模拟车站中的火车。

    • inOrder 是火车进入车站的顺序。
    • outOrder 是期望的火车出站顺序。
    • 当栈顶的火车编号与下一个应该出站的火车编号相匹配时,火车从栈中移除(出站)。
    • 如果当前没有火车可以出站,那么尝试将下一辆进站的火车加入到栈中。
    • 如果所有火车都已经进站并且无法完成出站顺序,函数返回false
    • 如果所有火车都成功出站,函数在最后会检查栈是否为空,如果为空则返回true
  2. Steps 函数:如果Trains函数返回true,则Steps函数会被调用来显示火车调度的具体步骤。

    • 它会输出每一步的操作,即火车入栈(in)或出栈(out)。
    • 在所有火车都出站后,输出FINISH
  3. main 函数:这是程序的入口点,它读取输入并调用TrainsSteps函数。

    • 首先读取一个num,这可能是测试案例的数量或者是某种与问题相关的数据,但是从代码上下文来看,它似乎没有被使用。
    • 然后读取inOrderoutOrder字符串,它们分别表示火车进站和期望的出站顺序。
    • 对于每个案例,如果Trains函数返回true,则调用Steps函数打印出调度步骤;否则,打印"No.",表明不能按给定的顺序调度火车。
  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

筱姌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值