Member 13592362 Ответов: 1

Спираль символов "#" и "."


Я пытаюсь сделать спираль, которая считывает нечетное число со входа (от 1 до 15), и она нарисует спираль из символов "#" и "." на выходе. Например
вход:
7


выход:
#######
......#
#####.#
#...#.#
#.###.#
#.....#
#######


или

вход:
9


выход:
#########
........#
#######.#
#.....#.#
#.###.#.#
#.#...#.#
#.#####.#
#.......#
#########


Что я уже пробовал:

Вчера я попытался сделать крышку из спирали - успешно -
Сегодня я застрял. Он работает для входных сигналов: 1,3,5,7,9 и 11. Но это не работает для 13 и 15.


#include<stdio.h>
 
int main(){
	int n;
	scanf("%d",&n);
	fflush(stdin);
 
	for(int i = 0;i<n;i++){
		for(int j = 0;j<n;j++){
			if(i==0||i==n-1||j==n-1)
				printf("#");
			else if(j==0&&i>1&&i<n-1)
				printf("#");
			else if(i==2&&j<n-2)
				printf("#");
			else if(j==n-3&&i>2&&i<n-2)
				printf("#");
			else if(i==n-3&&j<n-3&&j>1)
				printf("#");
			else if(j==2&&i>3&&i<n-2)
				printf("#");
			else if(i==4&&j>2&&j<n-4)
				printf("#");
			else if(j==6&&i>4&&i<n-4)
				printf("#");
			else if(i==6&&j>3&&j<n-5)
				printf("#");
			else printf(".");
			
		}
		printf("\n");
	}
	getchar();
	return 0;
 
}

Rick York

Вам нужно усовершенствовать свои логические проверки, потому что они также потерпят неудачу при более высоких значениях.

Я бы пересмотрел логику, чтобы добавить переменную под названием size или length или что-то подобное и установить ее первоначально на размер спирали. Затем, по мере завершения каждого "оборота" спирали уменьшайте размер. Продолжайте цикл до тех пор, пока размер не станет слишком мал, чтобы сделать полный цикл. Петли по существу одинаковы для каждого оборота, но они становятся меньше каждый раз, поэтому выясните, как сделать один цикл, а затем, насколько он сжимается каждый раз, и вы его получите. Он должен работать для любого размера, если вы делаете петлю правильно.

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Он работает для входных сигналов: 1,3,5,7,9 и 11. Но это не работает для 13 и 15.

Вы находитесь на неправильном пути. После того, как вы исправили код для 13 и 15, вам придется исправить его для 17 и 19. И главная причина, по которой он не работает для четных чисел, заключается в том, что ваш код не обрабатывает его.

Есть еще один способ, который будет обрабатывать четные и нечетные числа одновременно.
Build a 2D array of chars.
Fill the array with '.'
Set square limits 0,0 and n-1,n-1
Loop as long as spiral is not finished
    Draw outer loop of spiral in order (use 1 loop per line)
    Reduce square
Print 2D array