📜  门| Sudo GATE 2021 测验 |第 45 题(1)

📅  最后修改于: 2023-12-03 15:42:20.421000             🧑  作者: Mango

门 | Sudo GATE 2021 测验 | 第 45 题

本篇文章介绍 Sudo GATE 2021 测验的第 45 题——门,该题为编程题目,要求编写一个程序来计算一个循环门的状态。

题目描述

门的初始状态为 0,当输入一个值 v 时,门的状态将从 0 变为 1,再次输入相同的值 v 时,门的状态将从 1 变为 0,依次类推。例如,若门的状态为 0,输入 2 后状态变为 1,输入 2 后状态变为 0,输入 2 后状态变回 1,以此类推。

注意:输入的值范围为非负整数,不超过 $2^{63}-1$。

输入格式

输入文件为一个文本文件,每行包含一个非负整数 $v$。

输出格式

输出文件为一个文本文件,每行包含一个门的状态值,输出 1 表示门处于开启状态,输出 0 表示门处于关闭状态。

样例输入
2
2
2
0
0
样例输出
1
0
1
1
0
编程思路

本题目的关键在于维护一个门的状态,我们可以使用一个变量 $s$ 来记录门的状态,当 $s=0$ 时,表示门关闭,当 $s=1$ 时,表示门打开。对于每一个输入值 $v$,我们需要进行如下判断:

  1. 如果 $s=0$,说明门处于关闭状态,此时将 $s$ 的值改为 $1$ 即可。

  2. 如果 $s=1$,说明门处于打开状态,此时将 $s$ 的值改为 $0$ 即可。

由于输入的值范围非常大,需要使用 C++ 的 long long 类型进行输入和计算,同时需要注意边界条件。

代码实现

以下为 C++ 代码实现的函数部分:

#include <iostream>
#include <fstream>
using namespace std;

void process(string infilename, string outfilename)
{
    ifstream infile(infilename.c_str());
    ofstream outfile(outfilename.c_str());

    long long s = 0, v = 0;
    while(infile >> v)
    {
        if(s == 0)
        {
            s = 1;
            outfile << "1" << endl;
        }
        else if(s == 1)
        {
            s = 0;
            outfile << "0" << endl;
        }
    }
    infile.close();
    outfile.close();
}
总结

本题主要考察了编程实现的能力,要求熟练使用 C++ 的输入输出流、字符串操作等技术,同时需要注意边界条件。