用c ++创建大型基数6?

时间:2015-09-27 17:18:15

标签: c++ arrays dynamic-arrays

我在C ++中有一个任务,计算机必须猜测大范围之间的数字序列。但是,范围是基数6.我尝试创建一个可以递增和操作的大型数组(大约1300个元素)(某些特定位置包含数字的元素可以被移除/不递增),但是我甚至不知道如何在10号以外的地方创建一个数组(或向量)。每当我在网上寻求帮助时,我只能找到有关基类和指针的东西,这对我没有帮助。 。

总结:我需要创建一个包含0000到5555(基数6)中所有数字的大型数组/向量,这些数字一次可以增加一个元素,并且可以一次删除多个元素。有什么建议吗?

5 个答案:

答案 0 :(得分:2)

计算机通常不会在10号基础上存储数字;他们使用基数2.这里的问题实际上是数字的外部表示;即你所看到的。

API std :: strtoi允许您指定转换数字的基数。检查this链接。

在输出端,您需要将您的号码从普通基数2转换为基数6.我不打算在此处编写该代码。查找现有API或编写自己的API。但答案的要点是:存储在基数2中,读入并写出基数为6的字符串。

答案 1 :(得分:2)

如果我要制作这样的游戏,我会使用一个4(或多个位置)的数组来保持"颜色"每个地点的(或数字)。单独存储每个值使得使用它们比将它们组合成单个整数值更容易,这需要重复分割和乘法来操纵数字。同样地,对于正确的位置,正确的数字/错误的位置"信息将存储在4个项目的数组中。

您可以使用std::array<int,4>std::vector<> x(4);,但也可以使用许多其他替代方法 - 也许是一个包含成员数组的类?

答案 2 :(得分:0)

您可以使用嵌套for循环遍历每个数字:

/ * number = abcd * /

for(int a = 0; a < 5; a++)
{
    for(int b = 0; b < 5; b++)
    {
        for(int c = 0; c < 5; c++)//etc

然后你可以在一个大小为1295的数组中将每一个作为Math.pow(5,3) * a + Math.pow(5,2)*b+ ...来解决。

那应该会给你你想要的数组。

答案 3 :(得分:0)

如何做显而易见的事情:

using namespace std;
using Number = uint16_t; // uint16_t holds up to 2^16 - 1 = 65535
Number const base = 6;

Number const max_number = 1295; /* = (6^4 - 1) */
vector<Number> numbers; 
numbers.reserve(static_cast<size_t>(max_number));
for (Number i = 0; i < max_number; ++i) {
    numbers.emplace_back(i);
}

为了检查您的具体情况,我将基数为10的数字转换为“基数为6的字符串”,即。包含数字的基数6表示的字符串。存储它们效率低,但暂时使用方便。一个例子:

char char_rep(int n) { return static_cast<char>(n + 48); }

string representation(Number num) {
    string result("0000");
    for (size_t p = 0; p < 4; ++p) {
        result[3 - p] = char_rep(num % base);
        num /= base;
    }
    return move(result);
}

答案 4 :(得分:0)

实现此目的的最简单方法是创建一个类。该类只需要保留一个int,因为可能的值少于32767。

您需要决定如何存储该值。我只是在内部使用八进制,而不是打扰数字6和7.请记住,你还没有使用所有可能的int值,所以没有特别需要使用前1296个值。

此外,为每个数字添加getter和setter。这将使生活更轻松,尤其是在自定义operator<<(std::ostream&)的课程中。

相关问题