假设有一个由 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,所以此时我有点迷失了。
再次感谢。
您使用余数运算符
%
(模)的方法是正确的,但是您使用了错误的除数。 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