Все, что я хочу, это заполнить массив B массивом с 30 случайными 1, которые не являются рядом друг с другом, а не с первой или последней строкой, ни в первой, ни в последней строке. Я пытаюсь сделать это, создав еще один массив с именем empodia, чтобы получить там случайные числа (сформированные так, чтобы они были в границах массива B), но я не могу сделать это правильно. Я не хочу делать это с указателями. Спасибо за вашу помощь!Программирование в C-Game
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 23
#define M 79
int main()
{
int i,j,a,b,epilogi,seira,stili;
char A[N][M];
int B[N][M],empodia[15][2];
srand(time(NULL));
for(a=0;a<15;a++)
{
for(b=0;b<2;b++)
{
do{
seira=2+rand()%18; //i want to get a random number from 2-20
stili=2+rand()%76; //i want to get a random number from 2-77
}while(B[seira][stili]==1 || B[seira-1][stili-1]==1 || B[seira-1][stili+1]==1 || B[seira+1][stili-1]==1 || B[seira+1][stili+1]==1 || B[seira][stili-1]==1 || B[seira][stili+1]==1 || B[seira-1][stili]==1 || B[seira+1][stili]==1); //so that i will not get numbers one next to each other
empodia[a][0]= seira;
empodia[a][b+1]=stili;
B[seira][stili]=1;
}
}
for (i=0;i<N;i++)
{
for (j=0;j<M;j++)
{
if((i==0) || (j==M))
{
B[i][j]= 1;
}
else if ((i==N) || (j==0))
{
B[i][j]= 1;
}
else if ((i==N-1)|| (j==M))
{
B[i][j]= 1;
}
else if ((i==N) || (j==M-1))
{
B[i][j]= 1;
}
else if(B[i][j]!=1)
{
B[i][j]= 0;
}
}
}
for (i=0;i<N;i++)
{
for (j=0;j<M;j++)
{
printf("%d",B[i][j]);
}
printf("\n");
}
return 0;
}
Каково точное значение «рядом друг с другом»? Каждая соседняя ячейка (включая диагональные) считается «рядом друг с другом»? – BlueStrat
Использование однобуквенных макросов очень опасно. В genral, youz должен избегать таких имен также для другого кода на уровне файла. Вместо этого используйте более описательные имена. – Olaf
Bluestar: да даже диагональные –