🟡 Մարիոյի աշտարակ
Դե ինչ, փոքրիկ վարժությունները հաջողությամբ լուծելուց հետո այժմ ժամանակն է գրել լիակատար ծրագիր։ Երևի թե բոլորդ էլ կհիշեք, Նիթենդո ընկերության հայտնի «Մարիո» խաղը։ Այդ խաղում Մարիոն հաճախ պետք է բարձրանար աշտարակի վրա։
Եկե՛ք փորձենք կառուցել այս աշտարակը գրելով ծրագիր C++ լեզվով։
Մեր աշտարակը կունենա տեքստային ներկայացում, որտեղ աշտարակի ամեն աղյուսը կներկայացնենք
#
սիմվոլով։ Նախագծենք ծրագիրը այնպես, որ այն թույլ տա օգտագործողին ներմուծել աշտարակի բարձրությունը (այն իրենից ներկայացնում է ամբողջ տիպի դրական թիվ)։
Այսպիսով, եթե օգտագործողը ներմուծել է 4, ծրագիրը էկրանին կտպի հետևյալ պատկերը (նկատեք, որ ծրագիրը նախ էկրանին տպում է
Height:
տողը, որից հետո սպասում է, որպեսզի օգտագործողը ներմուծի աշտարակի բարձրությունը)։Եթե օգտագործողը ներմուծի 2, կունենանք այսպիսի պատկեր՝
Եթե օգտագործողը ներմուծի 1, կունենանք այսպիսի պատկեր՝
❗
Ինչպես արդեն նշել էինք նախորդ դասերի ընթացքում, ցանկացած ծրագիր գրելիս անհրաժեշտ է սահմանափակել և մշակել օգտագործողի կողմից ներմուծված տվյալները։ Այս խնդրի շրջանակում, եկեք սահամանափակենք աշտարակի բարձրությունը 8 -ով (ներառյալ)։
Եթե օգտագործողի ներմուծած թիվը չի պատկանում [1, 8] միջակայքին, ապա ծրագիրը պետք է նորից խնդրի օգտագործողին ներմուծել թիվ, այնքան ժամանակ, քանի դեռ օգտագործողը չի ներմուծել վալիդ ([1, 8] միջակայքին պատկանող) թիվ։
Այս օրինակում օգտագործողը ներմուծել է -1, և ծրագիրը նրան առաջարկում է նորից ներմուծել թիվ։ Հաջորդ անգամ օգտագործողը ներմուծել է 0, և ծրագիրը նրան կրկին առաջարկում է ներմուծել նոր թիվ։ Այս պրոցեսը շարունակվում է այնքան ժամանակ քանի դեռ օգտագործողը չի ներմուծել ճիշտ թիվ։
Հուշում 1
Ծրագիրը կարելի է բաժանել երկու տրամաբանական մասերի։ Նախ և առաջ պետք է գրել կոդ, որը կմշակի օգտագործողի մուտքագրած տվյալները։ Եթե օգտագործողի ներմուծած թիվը չի պատկանում [1, 8] միջակայքին, ապա ծրագիրը պետք է նորից խնդրի օգտագործողին ներմուծել թիվ այնքան ժամանակ, քանի դեռ օգտագործողը չի ներմուծել վալիդ թիվ։
🚩 Հուշում 1.1
Փորձե՛ք գրել կոդի այս հատվածը օգտագործելով
do-while
ցիկլի օպերատորը՝ - Տպել
Height:
տողը
- Սպասել օգտագործողի մուտքագրած թվին
- Կրկնել 1-2 քայլերը քանի դեռ օգտագործողը չի ներմուծել [1, 8] միջակայքին պատկանող թիվ։
Հուշում 2
Աշտարակը տպելու համար անհրաժեշտ է օգտագործել ներդրված ցիկլեր։
Հուշում 3
Փորձե՛ք տպել աշտարակի ավելի պարզ (ձախից հավասարեցված) տարբերակը։
Նկատե՛ք, որ առաջին տողը պարունակում է 1 հատ
#
։ Երկրորդ տողը՝ 2 հատ #
, երրորդ տողը` 3
և այդպես շարունակ։ Ընդհանուր դեպքում i
-երրորդ տողը պարունակում է i
հատ #
։🚩Հուշում 3.1
for (int i = 1; i <= height; i++) {
// Այստեղ պետք է լինի ցիկլ, որը կտպի i հատ #
}
Հուշում 4
Այժմ փորձե՛ք հավասարացնել աշտարակը դեպի աջ։
Այս օրինակում աշտարակի բարձրությունը հավասար է
8
։ Նկատենք, որ առաջին տողը պարունակում է 7 հատ .
և 1 հատ #։
Երկրորդ տողը պարունակում է 6
հատ .
և 2
հատ #
։ Երրորդ տողը պարունակում է 5
հատ .
և 3
հատ #։
Ընդհանուր դեպքում i
-րդ տողը պարունակում է (n-i)
հատ .
և i
- հատ #,
որտեղ n
-ը աշտարակի բարձրություն է։ 🚩 Հուշում 5
Աշտարակի
i
-երորդ տողը պարունակում է (n-i)
հատ բացատ և i
հատ #
։Constraints
Time limit: 0.2 seconds
Memory limit: 512 MB
Output limit: 1 MB