нужно решить задачу с заполнением массива c++
Помогите решить задачу, только изучаю c++ Заполнить произвольный массив размером N x N (N<10) по следующему правилу: 10000 00001 10000 00001 10000
Вот как я попробовал решить задачу, но это неверный код
const int n = 5;
const int m = 5;
int i, j;
int a[n][m];
int p = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if ((j = 0) and (p = 0))
{
a[i][j] = 1;
p = 1;
}
else if ((j = m- 1) and (p = 1))
{
a[i][j] = 1;
p = 0;
}
else
{
a[i][j] = 0;
}
cout << " " << a[i][j];
}
cout << endl;
}
Ответы (3 шт):
Автор решения: Harry
→ Ссылка
У вас в коде присваивание вместо сравнений. Кроме того, дополнительная переменная не нужна - просто смотрим, делится ли номер строки на 2 (четна - нечетна):
const int n = 5;
const int m = 5;
int i, j;
int a[n][m];
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if ((j == 0) and (i%2))
{
a[i][j] = 1;
}
else if ((j == m-1) and (i%2==0))
{
a[i][j] = 1;
}
else
{
a[i][j] = 0;
}
cout << " " << a[i][j];
}
cout << endl;
}
Автор решения: AR Hovsepyan
→ Ссылка
Я бы сделал быстрее _ без вложенного цикла и условий:
const size_t n = 5, m = 5;
int a[n][m] = { 0 };
/*int* p = a[0];
for (size_t i = 0; i < n; i++)
{
*p = 1;
p += 2* m * (i & 1);
*(p - 1) = 1;
}*/
Точнее, как правильно заметил Harry:
for (int i = 0; i < n; ++i)
a[i][(i % 2) * (m - 1)] = 1;
Автор решения: Furious_pawn
→ Ссылка
const int n = 5;
const int m = 5;
const int w = 6;
char a[n][w];
int p = 0;
int q = 1;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++) {
a[i][j] = '0';
cout << a[i][j];
}
cout << " ";
}
for (int i = 0; i < n; i++)
{
if(q%2) a[i][4] = '1';
else a[i][0] = '1';
q++;
cout << endl;
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++) {
cout << a[i][j];
}
cout << " ";
}
cout << endl;