Loading...
Vasetoo0 avatar Vasetoo0 5 Точки

Задача Кодиране - Nested Loops

Здравейте, може ли малко помощ за тази задача, някакво примерно решение, защото съм от онлайн записаните и не съм присъствал на упражненията и яко зациклих. Благодаря предварително.

 

1.Кодиране

Напишете програма, която чете от конзолата едно цяло число. На конзолата трябва да се отпечатат толкова на брой редове, колкото цифрено е числото. Като на първи ред съответстват единиците, на втори ред десетиците, на трети ред стотиците от числото и т.н., докато свършат цифрите от числото. На всеки ред трябва да се отпечата символ, който отговаря на следните условия:

  • символът, който трябва да се отпечата на даден ред се намира от ASCII таблицата. Неговият десетичен ASCII код се намира като към цифрата от въведеното число, която съответства на даден ред се прибави 33
  • символът се отпечатва толкова на брой пъти колкото е цифрата, съответстваща за този ред
  • ако за даден ред съответства цифра 0 на този ред се отпечатва еднократно "ZERO"

Примерен вход и изход       

Вход

Изход

Обяснения

2049

*********

%%%%

ZERO

##

Числото 2049 е четирицифрено следователно ще отпечатваме 4 реда.

На първи ред съответства цифрата 9. Към 9 прибавяме 33 и получаваме 42. Това е десетичният ASCII код на символът, който трябва да отпечатаме на първия ред. От ASCII таблицата намираме, че на 42 кореспондира символ *. Понеже на първи ред съответства цифра 9 отпечатваме 9 на брой *.

Цифрата 4 е за втори ред. 4+33=37. От ASCII таблицата намираме, че символът за печат е %. Отпечатваме 4 на брой %.

На трети ред съответства цифра 0. В този случай не търсим нищо в ASCII таблицата и на този ред отпечатваме еднократно ZERO.

Последната цифра от числото е 2. 2+33=35. От ASCII таблицата намираме символа за печат- # и го отпечатваме н 2 пъти.

Вход

Изход

Вход

Изход

9347439

*********

$$$

%%%%

(((((((

%%%%

$$$

*********

123456789

*********

))))))))

(((((((

''''''

&&&&&

%%%%

$$$

##

"

Подсказки:

  • Използвайте метода ToString, за да превърнете прочетеното число в стринг и след това запазете дължината му в променлива с метода Length. Потърсете информация за тях в интернет.
  • За да вземете последната цифра на числото, го разделете модулно на 10 (num % 10) и я запазете в една променлива. След това извадете поледната цифра от първоначалното число и го разделете на 10 (num / 10), за да може следващия път отново да вземете последната цифра.

Тествайте решението си в judge системата: https://judge.softuni.bg/Contests/Compete/Index/1165#3.

Тагове:
0
Programming Basics with Java
VasilK avatar VasilK 40 Точки

Малко по различно решение.

Без ползване на % 10

import java.util.Scanner;

public class Coding {

    public static void main(String[] args) {

        Scanner scanner = new Scanner( System.in );

        int n = Integer.parseInt( scanner.nextLine());
        String s = Integer.toString(n);


        for ( int i = s.length()-1; i >= 0; i--) {

            int x = s.charAt(i) - 48;
            int y = x + 33;

            if ( x == 0 ) {
                System.out.println("ZERO");
            } else {

                for ( int g = 1; g <= x; g++) {
                    System.out.printf("%s", (char) (y) );
                }
                System.out.println();
            }
        }
        System.out.println();
    }

}

 

0
Vasetoo0 avatar Vasetoo0 5 Точки

Благодаря много , само не разбрах , от каде е това -48? Ако може да ми обясниш за да го разбера , благодаря.

0
VasilK avatar VasilK 40 Точки

Ако вземем 2049 за тест. И започнем loop отзад напред. По ACSII 9 = 57. За да работи if теста за Zero ни трябва -48 за да приравним ASCII с релно число. По ASCII 0 = 48.

0
Vasetoo0 avatar Vasetoo0 5 Точки

Ооо, да сега зацепих. Благодаря много за отделеното време и обяснението! Тези чарове са ми пълен хаос ще отделя повече време на тях. 

0
NikolayG92 avatar NikolayG92 1 Точки

https://pastebin.com/nSMKqyW3 Това е моето решение.

0
VasilK avatar VasilK 40 Точки

Няма грижи. Утре ти ще помогнеш.

0
Tomo_Radomirski avatar Tomo_Radomirski 6 Точки

Здравей,

ако помогне:

https://pastebin.com/f4bjmRRe

сложил съм и коментари.

 

Успех

0
VulioRaikov avatar VulioRaikov 5 Точки

как да отпечатам имвола   ' * '      9  пъти   като незнам числото че е 9 ???

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

като n ти е поредното завъртане на цикъла и така при 9 ще са 9 звезди при 8  8 и тн,

може малко да бъркам синтаксиса но това ти трябва.

Console.WriteLine(new string("*",n));

0
VulioRaikov avatar VulioRaikov 5 Точки

неса ни го показвали това с   Console.WriteLine(new string("*",n));

но аз го направих така благодаря все пак 

 

  1. else

  2.                 {

  3.                     for (int j = 0; j < n; j++)

  4.                     {

  5.                         Console.Write((char)(n + 33));

  6.                     }

  7.                     Console.WriteLine();

0
JimBeam avatar JimBeam 1 Точки

А как е решението под C# на същата задача и същото условие? :)

0
MiroslavDinev avatar MiroslavDinev 115 Точки

Ето и решение на C# https://pastebin.com/2A8j8KQz

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