Софтуерно Инженерство
Loading...
Samuilow10eddy avatar Samuilow10eddy 5 Точки

Nested Loops - Challenging the wedding

Здравейте не мога да си намеря грешките в тази задача. Всички входове и изходи излизат а в Judge 20/100.

Това е моят код: https://pastebin.com/G1er66wK

Условието:

Провокирани от сватбата си, Михаела и Иван решават да предоставят нова услуга на клиенти на ресторанта си, а именно вечеря за запознанства - "Предизвикай Сватбата". Напишете програма, която отпечатва всички възможни срещи на клиентите на ресторанта. При настаняване всеки мъж и всяка жена получават талончета с поредни номера стартирайки от 1. Ако бъдат заети всички маси, програмата трябва да приключи. Всяка маса има две места.

Вход

От конзолата се четат точно 3 числа, всяко на отделен ред:

  • Броя клиенти мъже - цяло число в интервала [1...100]
  • Броя клиенти жени - цяло число в интервала [1...100]
  • Максималният брой маси - цяло число в интервала [1...100]

Изход

На конзолата се принтират на един ред, разделени с интервал всички срещи в следният формат:

  • ({№ клиент} <-> {№ клиент}) ({№ клиент} <-> {№ клиент}) ...
0
Programming Basics with Java
RuNNeR4142 avatar RuNNeR4142 396 Точки

Много по-лесна е отколкото мислиш.

public class E05ChallengeTheWedding {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int men = Integer.parseInt(scanner.nextLine());
        int women = Integer.parseInt(scanner.nextLine());
        int tablesMax = Integer.parseInt(scanner.nextLine());
        int tableCounter = 0;

        for (int m = 1; m <= men ; m++) {
            for (int f = 1; f <= women ; f++) {
                System.out.printf("(%d <-> %d) ", m, f);
                tableCounter++;
                if (tableCounter == tablesMax) {
                    return;
                }
            }
        }
    }
}

 

0
Samuilow10eddy avatar Samuilow10eddy 5 Точки

Хаха, това не го очаквах. Благодаря много!

2
AnnaIvanova11 avatar AnnaIvanova11 3 Точки

Привет, 

Искам да помоля за малко помощ с обяснение, ако може аз също имах проблем с тази задача, кода ми е същия,който си дал ти, но аз бях написала просто break и в Judge ми гръмна с 30 от 100.

Та въпроса ми е, тъй като търсих в нета за return след като видях какво си постнал и виждам, че се използва за изход от метода или класа(което не ми е въобще ясно още хаха), докато break се отнася за повече за loop и switch. Открих и че може да избегна излизане от main метода със search и break search. Въпроса ми е как да се ориентирам, кое кога да се приложи и как е по-правилно? 

0
Nikisf avatar Nikisf 72 Точки

Брейка излиза от цикъла, докато ретърна излиза от метода.

Ако имаш два вложени цикъла при един брейк във вложения ще излезеш само от него, докато ретърна ще излезе изцяло то метода и ще приключи изпълнението.

 

0
AnnaIvanova11 avatar AnnaIvanova11 3 Точки

А ако използва search за единия цикъл, ще изляза само от него нали?

  search:
            for (int j = 1; j <=men ; j++) {
                for (int k = 1; k <=women ; k++) {
                    System.out.printf("(%d <-> %d) ",j,k);
                    countTables+=1;
                    if (countTables == tables){
                        break search; // return
                    }

П.П.:Глупав въпрос, отговорих си. Мерси !

0
27/11/2019 01:17:49
Nikisf avatar Nikisf 72 Точки

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

0
AnnaIvanova11 avatar AnnaIvanova11 3 Точки

Благодаря за обясненията, помогна ми !!!

0
27/11/2019 20:39:52