使用序列 ID 显示序列中的数字

问题描述 投票:0回答:1

假设有一个由 4 个数字组成的序列。所有这些数字每四次就会重复一次。这些数字的正确顺序是:2、4、8、6。例如: 编号1:2 编号2:4 ID 3:8 编号 4:6 编号5:2 编号6:4 ID 7: 8 等等。 我的问题是,我可以通过仅接收序列 ID 作为输入来计算并显示与该序列 ID(2、4、8 或 6)相对应的数字之一。 我只需要找到它的数学方程,但如果有人能给我这个方程作为理想的 C++ 脚本,我也会同样高兴。 我会很高兴得到任何答案。谢谢。

我试图找到一种方法,使用用户输入的 ID 除以 10 得到的余数来查找数字,例如:

if(IDint % 10 == 1) cout << 2;
但我很快意识到,并不是每个以 1 结尾的 ID 都会有数字 2,所以此时我有点迷失了。 再次感谢。

c++ sequence
1个回答
0
投票

您使用余数运算符

%
(模)的方法是正确的,但是您使用了错误的除数。 10 的除数将重复 10 个数字的序列,而您需要的是 4 个数字。所以在你的情况下除数应该是 4。

这只是等式的一半。然后,从基于 1 的序列 ID 到基于 0 的系统进行模运算,这是一个简单的转换。为此,您只需先从序列 ID 中减去 1 即可。如果您更愿意在换行后处理基于 1 的值,那么您可以再次添加 1。

所以你的数学应该是:

int seq_id = 1 + (IDint - 1) % 4;
if (seq_id == 1) cout << 2;
if (seq_id == 2) cout << 4;
if (seq_id == 3) cout << 8;
if (seq_id == 4) cout << 6;

这是很多重复的代码。将序列存储在数组或向量中,然后为其计算(从零开始的)索引会更干净。

以下是从从 1 开始的 ID 开始的任何重复非零长度序列中选择值的示例:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> seq{ 2, 4, 8, 6 };
    for (int id = 1; id < 42; id++)
    {
        int selected = seq[(id-1) % seq.size()];
        std::cout << selected << ' ';
    }
}

输出:

2 4 8 6 2 4 8 6 2 4 8 6 2 4 8 6 2 4 8 6 2 4 8 6 2 4 8 6 2 4 8 6 2 4 8 6 2 4 8 6 2 
© www.soinside.com 2019 - 2024. All rights reserved.