Willze Fortner
Willze Fortner

Reputation: 141

Creates A Number Pattern Using Array

So the numbers pattern going like this :


Input    : 2
Output   : 
            0  0  0  1  0   0  0
            0  0  2  0  12  0  0
            0  3  0  0  0   11 0
            4  0  0  0  0   0  10
            0  5  0  0  0   9  0
            0  0  6  0  8   0  0
            0  0  0  7  0   0  0

I have solved it using usual method, but when I tried with array, the output is really messed up. Any suggestion how to make this number pattern with array?

This is my code that creates this number pattern :

int input, n, mid, i, j;
cin >> input;

n = (2*input)+3;
mid = (n+1)/2;

for(i = 1; i <= n; i++) {
    for (j = 1; j <= mid; j++) {
        if (i <= mid && j == mid-i+1) cout << i << " ";
        else if (i > mid && j == mid-n+i) cout << i << " ";
        else cout << "0 ";
    }
    for (j = mid+1; j <= n; j++) {
        if (i >= mid && j == n+mid-i) cout << (2*n-i) << " ";
        else if (i < mid && j == mid+i-1) cout << (2*n-i) << " ";
        else cout << "0 ";
    }
    cout << endl;
}

Thanks in advance.

Upvotes: 0

Views: 403

Answers (2)

Alessandro Scarlatti
Alessandro Scarlatti

Reputation: 734

Supplementing baymaxx, if you desire dynamic memory allocation:

   #include <iostream>
   #include <stdio.h>
   #include <string.h>

   int input, n, mid, i, j;
   cin >> input;

   n = (2*input)+3;
   mid = (n+1)/2;

   // create array of the specified size.
   int** arr = (int**) malloc (n * sizeof(int**));
   for (int p = 0; p < n; ++p) {
       arr[p] = (int*) malloc(n * sizeof(int));
       for (int q = 0; q < n; ++q) {
           arr[p][q] = 0;
       }
   }

   // fill array (algorithm attr. baymaxx)
   for(i = 1; i <= n; i++) {
     for (j = 1; j <= mid; j++) {
        if (i <= mid && j == mid-i+1) {
            arr[i - 1][j - 1] = i;
        }
        else if (i > mid && j == mid-n+i) {
            arr[i - 1][j - 1] = i;
        }

       }
       for (j = mid+1; j <= n; j++) {
           if (i >= mid && j == n+mid-i) {
              arr[i - 1][j - 1] = 2 * n - i;
           }
            else if (i < mid && j == mid+i-1) {
              arr[i - 1][j - 1] = 2 * n - i;
          }
       }
   }

   // print array
   for (int p = 0; p < n; ++p) {
       for (int q = 0; q < n; ++q) {
           int x = arr[p][q];
           std::cout << x << " ";
       }
       std::cout << endl;
   }

   // delete array
   for (int i = 1; i < n; ++i) {
       free(arr[i]);
   }
   free(arr);

Upvotes: 1

eshb
eshb

Reputation: 196

I think this code(working) might help you.

#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;

int main() {

   int input, n, mid, i, j;
   cin >> input;

   n = (2*input)+3;
   mid = (n+1)/2;

   int arr[n][n];
   memset(arr, 0, sizeof(arr));

   for(i = 1; i <= n; i++) {
     for (j = 1; j <= mid; j++) {
        if (i <= mid && j == mid-i+1) arr[i - 1][j - 1] = i;
        else if (i > mid && j == mid-n+i) arr[i - 1][j - 1] = i;
   }
   for (j = mid+1; j <= n; j++) {
      if (i >= mid && j == n+mid-i) arr[i - 1][j - 1] = 2 * n - i;
      else if (i < mid && j == mid+i-1) arr[i - 1][j - 1] = 2 * n - i;
   }
}

}

Upvotes: 1

Related Questions