Задача взята с сайта 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.
Вообще не нужно управлять шрифтами и размерами. Сосредоточьтесь на содержании статьи.
Спасибо, все учел.
В условии действительно не указаны действия после вывода последнего крестика в строке, однако эксперименты показывают, что пробел выводить не нужно. В противном случае, задача заходит на 0%. Поэтому если ограничиться только выводом крестиков, а в противном случае пробелов, то задача не зайдёт, пробелы нужно выводить только до последнего крестика строки.
Совершенно верно. Только это должно было быть в Вашей публикации.
А как насчёт двух других замечаний?
Все исправил и добавил в публикацию.
Владимир, пожалуйста будьте внимательными. Я в каждом комментарии пишу одно и тоже замечание, но Вы его игнорируете: ДОЛЖНО БЫТЬ ТОЛЬКО ОДНО ВЕТВЛЕНИЕ, а не два.
Исправил
Вроде хорошо.
Осталось отступы поправить.