【问题标题】:Non-recurring, Randomized, 2D Char Array That Contains Alphabet For C++ Beginner包含字母的非重复、随机、二维字符数组,适用于 C++ 初学者
【发布时间】:2018-11-21 19:32:12
【问题描述】:

Assignment 希望我们创建一个 5x10 的矩阵,其中包含随机且非重复出现的英文字母。但由于矩阵中有 52 个字母和 50 个房间,我不得不把它们收起来。但是如果我可以随机生成它们,我仍然会丢失两个字母,但不是相同的。

到目前为止我的代码是这样的;

#include <iostream>
#include <ctime> //for srand (number randomize)

using namespace std;

int main()
{
    srand(time(0)); // generates random number 

    const int ROWS = 5; //declaration of rows

    const int COLUMNS = 10; //declaration of columns

    //writing content of the matrix

    //I took out two letter (v and V) because matrix limit was 50 but all letters were 52

    char harf[ROWS][COLUMNS] = {
                     {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'},
                     {'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T'},
                     {'U', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e'},
                     {'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'},
                     {'p', 'q', 'r', 's', 't', 'u', 'w', 'x', 'y', 'z'}
    };


    for (int i = 0; i < ROWS; i++)

    {
        for (int j = 0; j < COLUMNS; ++j)

        {
            //generates a random index number

            int index1 = rand() % 5; //random numbers 0 to 5

            int index2 = rand() % 10; //random numbers 0 to 10


            //swaps harf [i][j] with harf [index1][index2] for it won't be repating itself

            char temp = harf[i][j];

            harf[i][j] = harf[index1][index2];

            harf[index1][index2] = temp;
        }
    }

    //printing header and random order matrix

    cout << "Random and nonrecurring matrix" << endl << endl;

    for (int i = 0; i < ROWS; ++i)

    {

        for (int j = 0; j < COLUMNS; ++j)

            cout << harf[i][j] << "     ";

        cout << endl << endl;

    }

我试图这样做;

char harf[ROWS][COLUMNS];

for (int i = 0; i

{ for (int j = 0; j

{

  harf[i][j] = rand() % 25 + 65 && rand() % 25 + 97;      } }

我也尝试过用“||”做同样的事情,但似乎没有用。

由于这是一个作业,我不能使用比这种表达式更高级的东西。有人可以告诉我如何将英文字母放入该矩阵吗?

【问题讨论】:

  • 从一个单独的一维数组中的所有大写和小写字母列表开始。随机删除两个。然后,将该数组中的每个元素与从数组中任意位置选择的随机元素交换。 (这是纸牌游戏和 MP3 文件玩家都知道的“洗牌”随机化。)然后将结果放入您的二维数组中,
  • 除了随机删除两个字母外,您的尝试似乎与我所说的差不多。你的方法有什么问题?
  • 我必须使用 2d 数组,并且我必须根据分配只使用 1。我做了这样的事情:` for (int i = 0; i
  • 顺便说一句,除了我的一直缺少 V 和 v 之外,没有任何问题,但它应该是随机的,就像每次 2 个字母会丢失但不同。但我不能创建两个单独的矩阵或其他一维数组。

标签: c++ arrays matrix


【解决方案1】:
  1. 创建长度为 52 的数组。
  2. 用字母表的字母填充这个数组,如果你愿意的话。 [abcde.....XYZ]
  3. 洗牌整个阵列。 [dPYka....slqEr]
  4. 删除数组中的最后两个字符。 [dPYka...slq]
  5. 现在,要访问您的随机字母,只需读取数组中的第一个或最后一个字符,并在每次读取一个字符时将其删除。 [dPYka...slq] --> [dPYka...sl](读一个“q”)
  6. 通过从该数组中一次访问一个字母来填充您的二维数组,确保在执行过程中删除字母。

如果这样做,删除的随机字母将是纯随机的 (ha*),最终的 5x10 矩阵也将是纯随机的 (ha*)。

*让我们不要深入了解真正随机数生成器的属性。

【讨论】:

  • 无需在步骤 4、5、6 中删除字母。只需遍历前 50 个数组元素并在 5x10 矩阵中依次输入它们
  • 我只被允许创建一个矩阵(我知道它是愚蠢的)。但感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2014-11-19
  • 2020-05-10
  • 1970-01-01
  • 2017-06-22
  • 2015-10-24
  • 1970-01-01
  • 2019-08-26
  • 2016-04-11
相关资源
最近更新 更多