Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу

Andrew1995 Знаток (265), на голосовании 1 год назад
Написать на языке Java программу, принимающую от пользователя ширину и высоту ромба и затем печатающую пустой ромб символами *.

public class Main {

public static void main(String[] args) {
код получающий параметры с консоли
---
Main.printDiamond(height, width);
}

private static void printDiamond(int height, int width){
---
Код печатающий ромб
}
}

Особое условия: построение необходимо произвести за один цикл, с минимальным количеством переменных
Голосование за лучший ответ
Оракул Оракул (62095) 1 год назад
Хз, как печатать ромб разной ширины и высоты, реально напечатать только идеальный ромб с одинаковыми сторонами. Если стороны нечетные - то ок, если четные - напечатается нечетный на 1 больше. Если ширина и высота будут разные - то идеальный ромб впишется в прямоугольник по меньшей стороне.
Более геморно выдумывать не буду.
Одно только условие в один цикл - уже гемор.
Дополнительных переменных - 3, но можно вообще избавиться, заменив их применение на их формулы из начала метода. И доп переменных не будет вообще.
 import java.util.Scanner; 

public class Test {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int height = scanner.nextInt();
int width = scanner.nextInt();
printDiamond(height, width);
}

private static void printDiamond(int height, int width) {
width = Math.min(height, width);
width = width % 2 == 0 ? width + 1 : width;
int x;
int y;
int middle = width / 2 + 1;
for (int i = 1; i <= width * width; i++) {
x = (i - 1) % width + 1;
y = (i - 1) / width + 1;

if (x == middle - (y - 1) || x == middle + (y - 1) || x == middle - (width - y) || x == middle + (width - y)) {
System.out.print("*");
} else {
System.out.print(" ");
}
if (i % width == 0) {
System.out.println();
}
}
}
}
Похожие вопросы