for while in while(构建矩阵)

时间:2017-12-08 20:56:18

标签: c++ for-loop matrix do-while

它构建矩阵的每个数字[i] [j],并在每个数字之后通过将数字[i] [j]与之前的数字[k] [l]进行比较来检查。

起初它因为没有数字而通过。

真正的目标是制作一个包含所有不同数字的矩阵。 我正在尝试重新开始检查矩阵的数量,以便在遇到任何相同的情况时它将重新开始检查。

(如果有任何相同的话,它会改变数字。更改后,更改的数字也可以与矩阵开头的任何人相同,所以我想在任何更改时再次检查)

int matris[10][10];

int counter = 0;

bool control = true;

for (int i = 0; i<10; i++) {

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

        matris[i][j] = rand() % 99;
        do {
            for (int k = 0; k <= i; k++) {

                for (int l = 0; l <= j; l++) {
                    if (matris[i][j] == matris[k][l])
                    {
                        matris[i][j] = rand() % 99;
                        counter++;
                       if(k==i&&l==j)break;
                        control = false;
                    } 
                     else control=true;

                }

            }

        } while (control == false);

    }

}

如果它写的值是99-0或100-1并不重要。我的老师问我们100-1之间的数字。

真正的问题是它无法控制回来。它有时给出相同的数字。它不应该。

counter =数字改变了多少次。

这里结果..

计数器:124 矩阵:   54 68 83 55 12 30 97 96 63 91   52 55 8 6 96 46 55 14 65 93   52 94 39 6 92 40 12 86 66 61   11 33 77 46 97 6 16 28 28 46   17 72 16 75 93 81 61 82 34 19   93 72 96 34 48 49 29 54 81 94   72 27 13 8 22 52 12 96 35 66   87 84 79 10 52 24 45 49 82 48   32 64 34 32 82 85 70 72 97 55   44 93 9 86 10 4 33 25 32 99

你可以看到是否有相同的数字,它排名。   99 97 97 97 96 96 96 96 94 94   93 93 93 93 92 91 87 86 86 85   84 83 82 82 82 81 81 79 77 75   72 72 72 72 70 68 66 66 65 64   63 61 61 55 55 55 55 54 54 52   52 52 52 49 49 48 48 46 46 46   45 44 40 39 35 34 34 34 33 33   32 32 32 30 29 28 28 27 25 24   22 19 17 16 16 14 13 12 12 12   11 10 10 9 8 8 6 6 6 4 按任意键继续 。 。

1 个答案:

答案 0 :(得分:0)

实际上do-while效果很好,但在其中你正在使用(int k = 0; k < i; k++),它会迭代到i-1并说如果你将第6个元素放在矩阵中,你只需要检查第5个元素,跳过第6个。您可以尝试(int k = 0; k < i+1; k++)

另一种方法是,如果你想让你的矩阵中的所有数字0-99先放入它们然后通过随机交换位置来扰乱矩阵......这应该可以解决问题。

#include <iostream>

using namespace std;

int main() {
    int matris[10][10];
    int sayac = 0;

    // put all of them in first
    for (int i = 0; i<10; i++) {
        for (int j = 0; j<10; j++) {
            matris[i][j] = sayac;
            sayac++;
        }
    }

    // then scramble
    for (int i = 0; i<10; i++) {
        for (int j = 0; j<10; j++) {
            int tmp,k ,l;
            k = rand()%9;
            l = rand()%9;
            tmp = matris[i][j];
            matris[i][j] = matris[k][l];
            matris[k][l] = tmp;
        }
    }

    // check the result
    for (int i = 0; i<10; i++) {
        for (int j = 0; j < 10; j++) {
            cout << matris[i][j] << "\t";
        }
        cout << endl;
    }
    return 0;
}

每次需要将rand()函数与通常为系统时钟的种子一起使用时,可以看到不同的结果。