Loading...
Elena123456 avatar Elena123456 235 Точки

08. Sunglasses Java script

Здравейте, моля за корекция в кода ми, тъй като Judge ми дава само 42/100 и програмата ми работи правилно само с четни числа, а при нечетните не ми печата средната част- ("|||").

Задачата е следната:

 

Пример: слънчеви очила

Да се напише програма, която въвежда цяло число n (3 ≤ n ≤ 100) и печата слънчеви очила с размер 5*n x n като в примерите:

Вход Изход Вход Изход
3 ******   ******
*////*|||*////*
******   ******
4 ********    ********
*//////*||||*//////*
*//////*    *//////*
********    ********
Вход Изход
5

**********     **********
*////////*     *////////*
*////////*|||||*////////*
*////////*     *////////*
**********     **********

 

 

 

 

function glases([arg1]) {
  let n=Number(arg1);
  let frame=""
  let frame1= "|"
    
 console.log("*".repeat(2*n)+" ".repeat(n)+"*".repeat(2*n))
             
 for(let row=1;row<=n-2;row++) {
   if(n%2==1 && row==n/2) {
     frame=frame1.repeat(n)}
   else if(n%2==0 && row==(n/2-1)) {
     frame=frame1.repeat(n) }
   else
   {frame=" ".repeat(n)}
 console.log(`*${"/".repeat(2*n-2)}*${frame}*${"/".repeat(2*n-2)}*`)
}
             
 console.log("*".repeat(2*n)+" ".repeat(n)+"*".repeat(2*n))
 } 

Тагове:
0
Programming Basics 14/04/2020 02:52:50
willystyle avatar willystyle 2472 Точки
function sunglasses([n]) {
    console.log('*'.repeat(2 * n) + ' '.repeat(n) + '*'.repeat(2 * n));
    for (let row = 1; row <= n - 2; row++) {
        let middle = (row === Math.ceil((n - 2) / 2) ? '|' : ' ').repeat(n);
        console.log(`*${'/'.repeat(2 * n - 2)}*${middle}*${'/'.repeat(2 * n - 2)}*`);
    }
    console.log('*'.repeat(2 * n) + ' '.repeat(n) + '*'.repeat(2 * n));
}

 

0
Elena123456 avatar Elena123456 235 Точки

Благодаря за отговора! Зная, че задачата може да се реши с Math.ceil  или с Math.trunc.

Бих искала да  разбера и къде греша в моята логика и защо judge ми дава само 42/100.

С if конструкция и обикновено делене изолирам един единствен ред от цикъла, на който да печатам средната част, а за другите редове в цикъла си печатам space. Ако n е четно число се печата правилно фигурата.

Къде е причината тази логика да не върви с нечетно число и да ми пропуска печатането на средната част?

Благадаря! 

Поздрави!

1
14/04/2020 11:10:00
willystyle avatar willystyle 2472 Точки

ок, в твоя случай само малко трябва да промениш 1 ред (вместо n, взимай n-1 при нечетни n):

if(n%2==1 && row==(n-1)/2) {

function glases([arg1]) {
    let n = Number(arg1);
    let frame = '';
    let frame1 = '|';

    console.log('*'.repeat(2 * n) + ' '.repeat(n) + '*'.repeat(2 * n));

    for (let row = 1; row <= n - 2; row++) {
        if (n % 2 == 1 && row == (n - 1) / 2) {
            frame = frame1.repeat(n);
        } else if (n % 2 == 0 && row == n / 2 - 1) {
            frame = frame1.repeat(n);
        } else {
            frame = ' '.repeat(n);
        }
        console.log(
            `*${'/'.repeat(2 * n - 2)}*${frame}*${'/'.repeat(2 * n - 2)}*`
        );
    }

    console.log('*'.repeat(2 * n) + ' '.repeat(n) + '*'.repeat(2 * n));
}

 

0
14/04/2020 11:28:42
Elena123456 avatar Elena123456 235 Точки

Благодаря! :)

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.