Задача взята с сайта e-olymp.
Задача
Валя на уроках труда училась вышивке крестиком. Но для вышивки ей нужно было приготовить макет узора, который также имел форму “крестика”, в котором количество вышитых крестиков по диагонали было равно номеру тренировочного узора. Помогите Вале приготовить нужное количество макетов.
Входные данные
Сначала кол-во макетов, потом их номера. Все номера узоров у Вали имели одну странность — всегда были нечетными и не превышали 80.
Выходные данные
Тесты
# | Входные данные | Выходные данные |
1 |
2 3 5 | X X X X X X X |
2 |
1 9 | X X X X X X X X X X X X X X X X X |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> using namespace std; int main() { int n, x; cin >> n; for (int l = 0; l < n; l ++){ cin >> x; for (int j = 0; j < x; j ++){ for (int i = 0; (i <= j) or (i <= x - 1 - j); i ++){ if ((i == j) or (j == x - 1 - i)) cout << "X"; else cout << " "; } cout << endl; } cout << endl; } return 0; } |
Решение
В данной задаче будем использовать потоковую обработку. Сначала считываем количество макетов [latex] n [/latex]. Затем в цикле for (int l = 0; l < n; l ++); считываем номера узоров. Выводить [latex] X [/latex] будем по диагоналям (справа налево и наоборот). Однако, стоит учесть, что после последнего символа [latex] X [/latex] в строке, выводить пробел не стоит. В условии задачи данный факт не фигурирует, однако, если же сделать иначе, то задача на сайте e-olymp не пройдет. Из этого вытекает, что пробелы должны располагаться исключительно до последнего крестика в строке. Для этого во внутреннем цикле ставим соответсвующее условие, чтобы при достижении последнего крестика в строке осуществлялся переход на другую строку, если это возможно. Также стоит не забыть, что между разными узорами нужно пропускать строку.
Ссылки
Засчитанное решение на e-olymp.
Код в ideone.