11392. Задание от Lisic

 

Zakhar_lutii, сказала Lisic, а сумеешь ли ты написать программу, которая воспроизведет мою шедевральную картину, название которой “Улитки после дождя?”. Помогите Zakhar_lutii справиться с заданием, а именно: по заданному натуральному числу n вывести изображение, которое имеет n строк и 2 * n – 1 столбцов, образованное символами улитка @ и символом :, как показано в примере.

 

Вход. Одно натуральное число n (n > 1).

 

Выход. Вывести изображение n * (2 * n – 1).

 

Пример входа

Пример выхода

5

@@@@@@@@@

:@@@@@@@:

::@@@@@::

:::@@@:::

::::@::::

 

 

РЕШЕНИЕ

двойной цикл

 

Анализ алгоритма

Картина содержит n строк. В i-ой строке в позициях от l до r будут выводиться символы улитки. В остальных позициях строки выводим :. Изначально положим l = 1 и r = 2 * n – 1. Первая строка состоит из одних улиток:

 

Для отображения второй строки сдвинем указатели навстречу друг другу на одну позицию (i++ и j--):

 

Следующая выводимая строка имеет вид:

 

Продолжаем выводить строки и сдвигать указатели пока не напечатаем всю картину.

 

Реализация алгоритма

Читаем входное значение n.

 

scanf("%d", &n);

 

Инициализируем указатели l = 1 на начало и r = 2 * n – 1 на конец строки. 

 

l = 1; r = 2 * n - 1;

 

Картина содержит n строк.

 

for (i = 1; i <= n; i++)

{

 

Выводим i-ую строку. Символами в позициях ljr являются улитки. В остальных позициях выводим ‘:’.

 

  for (j = 1; j <= 2 * n - 1; j++)

  {

    if (j >= l && j <= r) printf("@");

    else printf(":");

  }

 

Выводим символ ‘\n’ и уменьшаем интервал улиток, передвигая указатели навстречу друг другу на одну позицию.

 

  printf("\n");

  l++; r--;

}