C/C++

Для произвольного массива заполнить его числами от 1 до n

/* Долго думал над кодом на СИ. Пусть будет как второй ответ */

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n,m,k,i,u,p,w;
int ** A;
do
{
printf("m = ");
scanf("%d", &m);
}while(m < 1);
do
{
printf("k = ");
scanf("%d", &k);
}while(k < 1);
n = m * k;
A = (int**) malloc(m * sizeof(int*));
for(int x = 0; x < m; x++)
A[x] = (int*) malloc(k * sizeof(int));

i = 1;
u = p = w = 0;
while(i <= n)
{
if(u == 0 && p < k)
{
A[u][p++] = i++;
if(i > n) break;
if(p == k)
{
p--;
u++;
}
}
else if(p == 0 && u < m)
{
A[u++][p] = i++;
if(i > n) break;
if(u == m)
{
u--;
p++;
}
}
if(w % 2 == 0)
{
while(p > 0 && u < m)
{
A[u++][p--] = i++;
if(i > n) break;
if(u == m)
{
u--;
p += 2;
break;
}
}
w++;
}
else
{
while(u > 0 && p < k)
{
A[u--][p++] = i++;
if(i > n) break;
if(p == k)
{
p--;
u += 2;
break;
}
}
w++;
}
}

for(int x = 0; x < m; x++)
{
for(int y = 0; y < k; y++)
printf("%d\t",A[x][y]);
putchar('\n');
}

if(A == (int**) NULL) exit(1);
for(int x = 0; x < m; x++)
{
if(A[x] == (int*) NULL) exit(1);
free(A[x]);
A[x] = (int*) NULL;
}
free(A);
A = (int**) NULL;

return 0;
}
ДБ
Дима Бутенко
79 834
Лучший ответ
Вроде интересная задача и решения можно разные придумать.

Похожие вопросы