Loading...
Tarantula83 avatar Tarantula83 3 Точки

Задача Generate Rectangles ???

Здравейте колеги или аз не съм добре или програмата не е както трябва:

Кода дава само 20/100 и не мога да разбера защо.

Ето го Условието на Задачата:

Задача: генериране на правоъгълници

По дадено число n и минимална площ m да се генерират всички правоъгълници с цели координати в интервала [-n…n] с площ поне m. Генерираните правоъгълници да се отпечатат в следния формат:

(left, top) (right, bottom) -> area

Правоъгълниците се задават чрез горния си ляв и долния си десен ъгъл. В сила са следните неравенства:

  • -n ≤ left < right ≤ n
  • -n ≤ top < bottom ≤ n

 

Вход

От конзолата се въвеждат две числа, по едно на ред:

  • Цяло число n в интервала [1 … 100] – задава минималната и максималната координата на връх.
  • Цяло число m в интервала [0 … 50000] – задава минималната площ на генерираните правоъгълници.

 

Изход

  • На конзолата трябва да се отпечатат описаните правоъгълници във формат като в примерите по-долу.
  • Ако за числата n и m няма нито един правоъгълник, да се изведе “No”.
  • Редът на извеждане на правоъгълниците е без значение.

Ето го и кода ми:

import java.util.Scanner;

public class GenerateRectangles {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int n = Integer.parseInt(scanner.nextLine());
        int m = Integer.parseInt(scanner.nextLine());
        int count = 0;

        for (int left = -n; left < n; left++) {
            for (int top = -n; top < n; top++) {
                for (int right = left + 1; right <= n; right++) {
                    for (int bottom = right + 1; bottom <= n; bottom++) {
                        int area = Math.abs(right - left) * Math.abs (bottom - top);

                        if (area <= m) {
                            System.out.printf("(%d, %d) (%d, %d) -> %d%n", left, top, right, bottom, area);
                            count++;
                        }
                        }
                    }
                }
            }
        if (count == 0) {
            System.out.println("No");
        }

    }
}

Не мога да открия грешката при вход 3,36 изходът трябва да (-3, -3) (3, 3) -> 36 а при тоя код печата "No".

Благодаря Предварително.

Тагове:
0
Programming Basics
emo.999 avatar emo.999 399 Точки

Ти си си наред колега :) 

Нормално е да се запънеш с вложените цикли. Всеки е минал през това.

Оправих кода ти: https://pastebin.com/kUTB4JkF

Беше обърнал знака при сравнението на площта с минималната площ.

И в най-вътрешния цикъл на bottom си задал right +1, а би трябвало да е top +1.

Също така първите два цикъла би трябвало да се въртят до "n" включително. 

Поздрави!

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