Нужно написать программу, которая будет выводить числа от 1 до n по спирали в таком направлении: 1 в левом верхнем углу, спускаемся вниз, вправо, вверх, влево, вниз и т.д. Размерность матрицы вводится с клавиатуры. Вот мой прекрасный код:
#include "pch.h"
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
using namespace std;
int main(void)
{
int sw, sh, l, f, i = 0, j = 0;
int counter = 0;
printf("enter the widht of array: ");
scanf_s("%d", &sw);
printf("enter the height of array: ");
scanf_s("%d", &sh);
int** Ar = new int *[sw];
for (int i = 0; i < sw; i++)
Ar[i] = new int[sh];
int n = 1, x = 0, y = 0, k = 1;
int tw = 0, th = 0;
l = sw;
f = sh;
/*for (i = 0; i < sw; i++)
{
for (j = 0; j < sh; j++)
{
*((int *)Ar + (i * sw) + j) = k++;
printf("%3d", *((int *)Ar + (i * sw) + j));
}
printf("\n");
}*/
**Ar = 1;
while (1)
{
switch (n)
{
case 1:
for (int th = 0; th < sh; th++)
{
y++;
*((int *)Ar + (x * sw) + y) = k++;
}
counter++ ;
if (counter >= 3)
sh--;
break;
case 2:
for (th = 0; th < sh; th++)
{
y--;
*((int *)Ar + (x * sw) + y) = k++;
}
counter++;
if (counter >= 3)
sh-- ;
break;
case 3:
for (int tw = 0; tw < sw; tw++)
{
x++;
*((int *)Ar + (x * sw) + y)= k++;
}
counter++;
if (counter >= 3)
sw--;
break;
case 4:
for (tw = 0; tw < sw; tw++)
{
x--;
*((int *)Ar + (x * sw) + y) = k++;
}
counter++;
if (counter >= 3)
sw--;
break;
}
sw = l;
sh = f;
if (sw % 2 == 0)
{
if (x == y + 1 && x == sw / 2)
break;
else if ((x == 0 && y == 0) || (x == y + 1 && x < sw / 2)) n = 1;
else if (x == y && x >= sw / 2) n = 2;
else if (x + y == (sw - 1) && x < sw / 2) n = 3;
else if (x + y == (sw - 1) && x >= sw / 2) n = 4;
}
else
{
if (x == y && x == (sw / 2) - 0.5)
break;
else if ((x == 0 && y == 0) || (x == y + 1 && x < sw / 2)) n = 1;
else if (x == y && x > sw / 2) n = 2;
else if (x + y == sw && x < (sw / 2) - 0.5) n = 3;
else if (x + y == sw - 1 && x > sw / 2) n = 4;
}
for (i = 0; i < sw; i++)
{
for (j = 0; j < sh; j++)
printf("%4d ", *((int *)Ar + (i * sw) + j));
printf("\n");
printf("\n");
}
}
system("pause");
return 0;
}
Вывод зациклен и я вот не могу разобраться. Помогите найти ошибку и, возможно, можете предложить код по-короче)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Дали мне задание написать написать генератор случайных чисел методом фибоначчи с запаздываниемЯ нашёл, что subtract_with_carry_engine как раз то что...
Возможно ли при передаче пака параметров принять его по ссылке и что-то изменить в одном из параметров?
Задали нам на дом найти факториал 16!, используя MPIВсё хорошо считается до тех пор, пока два MPI_Bcast не начинают отправлять сообщения всем потокам