如何用对角线编写二维数组?

时间:2015-10-22 20:15:18

标签: c++ arrays

如何使用

的对角数字编写C ++ 2D数组
n - size of array (width and height)
x - how many the same number in a row
c - how many numbers must be used

的例子
n = 5 
x = 2 
c = 2

输出是:

0 0 1 1 0
0 1 1 0 0
1 1 0 0 1
1 0 0 1 1
0 0 1 1 0

我目前的代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int n=0, x=0, c=0;
    int temp_x=0,temp_c=-1;
    cin >> n >> x >> c;

    c--;
    for(int i=0; i<n;i++){
        for(int j=0; j<n;j++){
            cout << ++temp_c;
            temp_x++;

            if(temp_x>x){
                temp_x=0;
                if(temp_c=c){
                    temp_c=-1;
                }
            }
        }
        cout << endl;
    }
}

我将非常感谢你的帮助。 :) 但我的代码返回错误的数字:(

2 个答案:

答案 0 :(得分:0)

你想这样做吗?

int main()
{
    int n=0, x=0, c=0;
    int temp_x=0,temp_c=0;
    cin >> n >> x >> c;

    c--;
    for(int i=0; i<n;i++){
        for(int j=0; j<n;j++){

            if(temp_x<x)
            {
                temp_x++;
                cout << temp_c << " ";
                continue;
            }

            temp_c++;
            temp_x=0;

            if(temp_c>c)
            {
                temp_c=0;
            }

            cout << temp_c << " ";
            temp_x++;

            }
            cout << endl;
    }
}

输出:

5 2 2
0 0 1 1 0
0 1 1 0 0
1 1 0 0 1
1 0 0 1 1
0 0 1 1 0

5 2 3
0 0 1 1 2
2 0 0 1 1
2 2 0 0 1
1 2 2 0 0
1 1 2 2 0

5 3 2
0 0 0 1 1
1 0 0 0 1
1 1 0 0 0
1 1 1 0 0
0 1 1 1 0

答案 1 :(得分:0)

我想提出另一种算法:

Run It Online !

#include <iostream>
#include <vector>
#include <numeric>  // iota

using std::cout;
using std::endl;

void fill(const size_t n   ///< size of array (width and height)
        , const size_t x   ///< how many the same number in a row
        , const size_t c)  ///< how many numbers must be used
{
    // generate the sequence of possible numbers
    std::vector<int> numbers(c);
    std::iota(numbers.begin(), numbers.end(), 0);

    //std::vector<int> all(n * n);  // for storing the output, if needed
    for (size_t i = 0,            // element index
                k = 0,            // "number" index
                elements = n * n; // the square matrix can also be viewed as a n*n-long, 1D array
         i < elements;
         k = (k + 1) % c)  // next number (and the modulus is for circling back to index 0)
    {
        // print the number "x" times
        for (size_t j = 0; j < x && i < elements; ++j, ++i)
        {
            // break the line every "n" prints
            if ((i % n) == 0)
            {
                cout << endl;
            }

            //all[i] = numbers[k];
            cout << numbers[k] << " ";
        }
    }
    cout << endl;

}

int main()
{
    fill(5, 2, 2);
}

fill(5, 2, 2)

的输出
0 0 1 1 0 
0 1 1 0 0 
1 1 0 0 1 
1 0 0 1 1 
0 0 1 1 0