Добрый день, помогите с реализацией. Задача: Напишите класс который выводит «песчаные часы» из заданого символа и количества шагов.
Пример Символ 8( шагов 5)
.8888888888
..88888888
….888888
……8888
……..88
……8888
….888888
..88888888
.8888888888
Я делал так, а как дальше …..
Java | ||
|
Добавлено через 49 минут
Вот работает))
Java | ||
|
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Нужно написать класс который выводит песочные часы из звездочек.
мой код:
public class Task21 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int columnCount = in.nextInt();
String star = "*";
String space = " ";
for (int i = 1; i <= columnCount; i++) {
System.out.println();
for (int j = 1; j <= columnCount; j++) {
if (i == 1 || i == columnCount
|| j == i || j == columnCount - i + 1) {
System.out.print(star);
}
else{
System.out.print(space);
}
}
}
}
}
мой тест:
public class Task21Test {
@Test
public void whenHourglassWidthEquals3() {
ByteArrayInputStream in = new ByteArrayInputStream("5".getBytes());
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
System.setIn(in);
Task21.main(null);
String expected =
"*****" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" *" + System.lineSeparator() +
" * *" + System.lineSeparator() +
"*****";
assertThat(out.toString(), is(expected));
}
@Test
public void whenHourglassWidthEquals8() {
ByteArrayInputStream in = new ByteArrayInputStream("8".getBytes());
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
System.setIn(in);
Task21.main(null);
String expected =
"********" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" **" + System.lineSeparator() +
" **" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" * *" + System.lineSeparator() +
"********";
assertThat(out.toString(), is(expected));
}
@Test
public void whenHourglassWidthEquals9() {
ByteArrayInputStream in = new ByteArrayInputStream("9".getBytes());
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
System.setIn(in);
Task21.main(null);
String expected =
"*********" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" *" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" * *" + System.lineSeparator() +
" * *" + System.lineSeparator() +
"*********";
assertThat(out.toString(), is(expected));
}
}
Тест не проходит. Прошу помочь с исправлением ошибки в коде.
задан 15 окт 2022 в 16:00
Потому что в тесте нет пробелов после звезд, а у тебя есть. Сам только что делал ее, там надо проверки добавить на простановку space
. Т.Е. если уже вывелись все звезды что бы он не ставил .
и пробела
в этом месте тоже ошибка будет
for (int i = 1; i <= columnCount; i++) {
System.out.println();
я в после прохождения второго цикла делаю перевод строки + делаю проверку если это последний этап цикла то не делаю перевод строки
Tiarait
1,9801 золотой знак9 серебряных знаков21 бронзовый знак
ответ дан 28 окт 2022 в 12:23
1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.gmail.vms0770; | |
import java.util.Scanner; | |
public class WorkFourteen { | |
public static void main(String[] args) { | |
Scanner sc = new Scanner(System.in); | |
System.out.print(«Введите (нечетное число) ширину песочных часов: «); | |
int a = sc.nextInt(); | |
for (int i=1; i<=a; i++) { | |
System.out.println(); | |
for (int j=1; j<=a; j++) { | |
if (j>=i && j<=a-i+1 || j<=i && j>=a-i+1) { | |
System.out.print(«*»); | |
} | |
else{ | |
System.out.print(» «); | |
} | |
} | |
} | |
sc.close(); | |
} | |
} |
Простой алгоритм песочных часов, реализованный на java
Как новичок, это мой девственный блог.Я также прошу больших парней критиковать и давать советы.
public static void main(String[] args) {
System.out.println(«Это общий алгоритм песочных часов. Установите ширину песочных часов (ширина равна высоте, а ширина должна быть нечетным числом и должна быть больше или равна 3):»);
Scanner sc=new Scanner(System.in);
int weigh=sc.nextInt(); // Получаем ширину песочных часов (ширина равна высоте)
for(int i=0;i<weigh;i++){
if(i<weigh/2){
for (int j=1;j<=i;j++) System.out.print(" ");
for (int j=1;j<=weigh-2*i;j++) System.out.print("*");
}else{
for (int j=1;j<=weigh-i-1;j++) System.out.print(" ");
for (int j=1;j<=2*(i-weigh/2)+1;j++) System.out.print("*");
}
System.out.println();
}
}
Я лично считаю, что независимо от того, какая это сложная программа, ее можно разделить на простые шаги, шаг за шагом. На самом деле, это легко понять независимо от следующих шагов. Возвращаясь к сути, это очень простой алгоритм песочных часов, возможно, мои шаги Это сложнее. Мой принцип — стараться не определять сторонние переменные в процессе, за исключением переменных цикла в теле цикла. Конечно, это моя точка зрения новичка.
(1) Прежде всего, мы должны продумать весь этап завершения песочных часов. Не говоря уже о демонтаже и демонтаже всего этапа завершения песочных часов на верхнюю и нижнюю части (обратите внимание, почему верхняя, средняя и нижняя части здесь не разделены из-за звездочки посередине) Он соответствует как правилам в верхней части, так и правилам в нижней части), а затем разделяет выходную часть на две части, выходные звездочки и пробелы, так что общая идея была передана.
(2) Поскольку в соответствии с законом выводится несколько строк данных, внешний цикл — это количество строк, которые необходимо зациклить (ширина песочных часов — это высота, поэтому вес здесь высокий. Обратите внимание, что переменная цикла i здесь начинается с 0 из).
(3) Условия разделения на верхнюю и нижнюю части определяются исходя из половины высоты песочных часов, так что распределяется задача разделения песочных часов на верхнюю и нижнюю части.
(4) Затем выведите * и пробелы в соответствии с условиями в соответствии с разницей между верхней и нижней частями (условия здесь требуют небольшого математического мышления от старших братьев)
(5) Сначала верхняя часть:
1. Характеристики каждой строки пробелов: начальная строка не выводится, а каждая последующая строка выводит еще один пробел (до половины от общего количества строк). Примечание (для новичков): цикл for здесь означает: вывести указанное пространство. Поскольку внешний цикл начинается с 0 и увеличивается на 1 каждый раз, он согласуется с нашим начальным значением и изменением количества пробелов. Строка 0 (здесь 0 — действительная строка 1) i равно 0, тогда j <= 0 не выполняется, поэтому пробелы не выводятся , Первая строка i = 1, начальное значение j равно 1, j <= 1, затем вывести пробел и так далее (j<=iПроисхождение).
2. Характеристики каждого планетарного числа: исходная строка выводит общую длину песочных часов со звездочками, а каждая последующая строка последовательно выводит 2 звездочки (до половины от общего числа строк). Примечание (то же, что и выше): поскольку каждая строка выходных звездочек определяется указанным количеством строк, которые должны быть прокручены, то есть каждая строка до следующей строки — это общее количество звездочек в предыдущей строке минус 2. Поскольку начальное значение — это вес, одна строка уменьшается на 2 * 1 звездочки. , Две строки уменьшаются на 2 * 2 звездочки, затем строка i уменьшается на 2 * i звездочки, тогда общее количество звездочек в каждой строке равноweigh-2*i。(j<=weigh-2*i Происхождение i, начальное значение i — 0 (помните).
(6) Вторая половина:
1. Характеристики каждой строки пробелов: исходная строка выводит половину общей высоты песочных часов, а каждая последующая строка последовательно выводит на один пробел меньше (до общего количества строк). Примечание (то же, что и выше): здесь начальное значение цикла for равно 1, затем необходимо вывести первую строку: вес-1-указанное количество строк, которые были зациклены до (weigh-1-i Происхождение i, начальное значение i равно 0 (помните)
2. Характеристика каждого планетарного числа такова: здесь труднее понять. Грубо говоря, шаги следующие: предполагая, что ширина воронки равна 7, затем третья строка нижней половины (поскольку начальное значение i равно 0, третья строка относится к Строка 4) Одна звездочка, три звездочки в четвертой строке, пять звездочек в пятой строке и семь звездочек в шестой строке. Поскольку начальное значение равно 1, это должно быть определенное выражение +1
, в этот момент i начинается с 3, поэтому для удобства мы уменьшаем его до 0, т.е. i-3, затем первую строку нижней половины (т.е. третью строку целого) Количество звездочек2*(3-3)+1, Число планеты 2 равно2*(4-3)+1, И так далее, i-я строка равна 2 * (i-3) +1, тогда количество планет в нижней половине воронки шириной 7 равно2*(i-3)+1。
Из полученного выше выражения мы можем провести аналогию, что количество планет в нижней половине воронки шириной i равно2*(i-weigh/2)+1
Резюме: Хотя я написал много шагов, я чувствую, что выражения каждого шага описаны более подробно. Надеюсь, что большие парни не будут жаловаться. В конце концов, я набирал слова вручную. Мне трудно понять. Я действительно могу быть беспомощным. В конце концов, мой уровень ограничен. Еще раз спасибо большим парням, которые смотрели.
Я пытаюсь сделать песочные часы, но я не могу получить правильный код для песочных часов. Что я делаю неправильно? Это более короткая версия оригинального кода.
#include <iostream>
using std::cin; using std::cout; using std::endl;
int main()
{
int number;
cin >> number;
//Hourglass
for (i = number; i > 0; i--)
{
cout << endl;
for (int j = number; i < j; j--)
{
cout << " ";
}
for (int j = 0; i > j; j++)
{
cout << "*";
}
for (int j = 0; i > j; j++)
{
cout << "*";
}
}
for (int i = 0; i < number; i++)
{
for (int j = 0; j < (number - (i + 1)); j++)
{
cout << " ";
}
for (int j = 0; j < (2 * i + 1); j++)
{
cout << "*";
}
for (int j = 0; j < (number - (i + 1)); j++)
{
cout << " ";
}
cout << endl;
}
}
-3
Решение
Проблема в вашем первом цикле. Что вам нужно сделать, это двигаться
cout << endl;
в нижней части цикла, так что он создает новую строку перед входом во второй цикл.
for (int i = number; i > 0; i--){
for (int j = number; i < j; j--)
{
cout << " ";
}
for (int j = 0; i > j; j++)
{
cout << "*";
}
for (int j = 0; i > j; j++)
{
cout << "*";
}
cout << endl;
}
for (int i = 0; i < number; i++)
{
for (int j = 0; j < (number - (i+1)); j++)
{
cout << " ";
}
for (int j = 0; j <= (2 * i) + 1; j++)
{
cout << "*";
}
cout << endl;
}
это должно дать вам песочные часы, как так
**********
********
******
****
**
**
****
******
********
**********
0
Другие решения
Следующий код напечатает шаблон песочных часов (*) на экране. переменная размер высота песочных часов для печати. Скомпилируйте код, используя компилятор g ++.
#include <iostream>
int main() {
int row, col;
int size;
int diagA, diagB;
std::cout << "Enter height of the hourglass ";
std::cin >> size;
for ( row=0; row<size; row++ ) {
for ( col=0; col<size; col++ ) {
diagA = row;
diagB = size-row-1;
if ( diagA <= diagB ){
if ( col >= diagA && col <= diagB )
std::cout << "*";
else
std::cout << " ";
}
else {
if ( col >= diagB && col <= diagA )
std::cout << "*";
else
std::cout << " ";
}
}
std::cout << std::endl;
}
std::cout << std::endl;
return 0;
}
0
Improve Article
Save Article
Improve Article
Save Article
Given positive integer n, print numeric pattern in form of an hourglass.
Examples :
Input : rows_no = 7 Output : 1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6 7
C++
#include <iostream>
using
namespace
std;
void
pattern(
int
rows_no)
{
int
i, j, k;
for
(i = 1; i <= rows_no; i++) {
for
(k = 1; k < i; k++)
cout <<
" "
;
for
(j = i; j <= rows_no; j++)
cout << j <<
" "
;
cout << endl;
}
for
(i = rows_no - 1; i >= 1; i--) {
for
(k = 1; k < i; k++)
cout <<
" "
;
for
(j = i; j <= rows_no; j++)
cout << j <<
" "
;
cout << endl;
}
}
int
main()
{
int
rows_no = 7;
pattern(rows_no);
return
0;
}
Java
import
java.io.*;
class
GFG
{
static
void
pattern(
int
rows_no)
{
int
i, j, k;
for
(i =
1
; i <= rows_no; i++) {
for
(k =
1
; k < i; k++)
System.out.print(
" "
);
for
(j = i; j <= rows_no; j++)
System.out.print(j +
" "
);
System.out.println();
}
for
(i = rows_no -
1
; i >=
1
; i--)
{
for
(k =
1
; k < i; k++)
System.out.print(
" "
);
for
(j = i; j <= rows_no; j++)
System.out.print(j +
" "
);
System.out.println();
}
}
public
static
void
main (String[] args)
{
int
rows_no =
7
;
pattern(rows_no);
}
}
Python3
def
pattern(rows_no):
for
i
in
range
(
1
, rows_no
+
1
):
for
k
in
range
(
1
, i):
print
(
" "
, end
=
"")
for
j
in
range
(i, rows_no
+
1
):
print
(j, end
=
" "
)
print
()
for
i
in
range
(rows_no
-
1
,
0
,
-
1
):
for
k
in
range
(
1
, i):
print
(
" "
, end
=
"")
for
j
in
range
(i, rows_no
+
1
):
print
(j, end
=
" "
)
print
()
rows_no
=
7
pattern(rows_no)
C#
using
System;
class
GFG
{
static
void
pattern(
int
rows_no)
{
int
i, j, k;
for
(i = 1; i <= rows_no; i++) {
for
(k = 1; k < i; k++)
Console.Write(
" "
);
for
(j = i; j <= rows_no; j++)
Console.Write(j +
" "
);
Console.WriteLine();
}
for
(i = rows_no - 1; i >= 1; i--)
{
for
(k = 1; k < i; k++)
Console.Write(
" "
);
for
(j = i; j <= rows_no; j++)
Console.Write(j +
" "
);
Console.WriteLine();
}
}
public
static
void
Main ()
{
int
rows_no = 7;
pattern(rows_no);
}
}
PHP
<?php
function
pattern(
$rows_no
)
{
for
(
$i
= 1;
$i
<=
$rows_no
;
$i
++)
{
for
(
$k
= 1;
$k
<
$i
;
$k
++)
echo
" "
;
for
(
$j
=
$i
;
$j
<=
$rows_no
;
$j
++)
echo
$j
.
" "
;
echo
"n"
;
}
for
(
$i
=
$rows_no
- 1;
$i
>= 1;
$i
--)
{
for
(
$k
= 1;
$k
<
$i
;
$k
++)
echo
" "
;
for
(
$j
=
$i
;
$j
<=
$rows_no
;
$j
++)
echo
$j
.
" "
;
echo
"n"
;
}
}
$rows_no
= 7;
pattern(
$rows_no
);
?>
Javascript
<script>
function
pattern( rows_no)
{
let i, j, k;
for
(i = 1; i <= rows_no; i++)
{
for
(k = 1; k < i; k++)
document.write(
" "
);
for
(j = i; j <= rows_no; j++)
document.write(j +
" "
);
document.write(
"<br/>"
);
}
for
(i = rows_no - 1; i >= 1; i--)
{
for
(k = 1; k < i; k++)
document.write(
" "
);
for
(j = i; j <= rows_no; j++)
document.write(j +
" "
);
document.write(
"<br/>"
);
}
}
let rows_no = 7;
pattern(rows_no);
</script>
Output :
1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6 7
Time Complexity : O(rows_no*rows_no) ,where rows_no is rows value taken from user.
Space Complexity : O(1) ,as we are not using any extra space.
Improve Article
Save Article
Improve Article
Save Article
Given positive integer n, print numeric pattern in form of an hourglass.
Examples :
Input : rows_no = 7 Output : 1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6 7
C++
#include <iostream>
using
namespace
std;
void
pattern(
int
rows_no)
{
int
i, j, k;
for
(i = 1; i <= rows_no; i++) {
for
(k = 1; k < i; k++)
cout <<
" "
;
for
(j = i; j <= rows_no; j++)
cout << j <<
" "
;
cout << endl;
}
for
(i = rows_no - 1; i >= 1; i--) {
for
(k = 1; k < i; k++)
cout <<
" "
;
for
(j = i; j <= rows_no; j++)
cout << j <<
" "
;
cout << endl;
}
}
int
main()
{
int
rows_no = 7;
pattern(rows_no);
return
0;
}
Java
import
java.io.*;
class
GFG
{
static
void
pattern(
int
rows_no)
{
int
i, j, k;
for
(i =
1
; i <= rows_no; i++) {
for
(k =
1
; k < i; k++)
System.out.print(
" "
);
for
(j = i; j <= rows_no; j++)
System.out.print(j +
" "
);
System.out.println();
}
for
(i = rows_no -
1
; i >=
1
; i--)
{
for
(k =
1
; k < i; k++)
System.out.print(
" "
);
for
(j = i; j <= rows_no; j++)
System.out.print(j +
" "
);
System.out.println();
}
}
public
static
void
main (String[] args)
{
int
rows_no =
7
;
pattern(rows_no);
}
}
Python3
def
pattern(rows_no):
for
i
in
range
(
1
, rows_no
+
1
):
for
k
in
range
(
1
, i):
print
(
" "
, end
=
"")
for
j
in
range
(i, rows_no
+
1
):
print
(j, end
=
" "
)
print
()
for
i
in
range
(rows_no
-
1
,
0
,
-
1
):
for
k
in
range
(
1
, i):
print
(
" "
, end
=
"")
for
j
in
range
(i, rows_no
+
1
):
print
(j, end
=
" "
)
print
()
rows_no
=
7
pattern(rows_no)
C#
using
System;
class
GFG
{
static
void
pattern(
int
rows_no)
{
int
i, j, k;
for
(i = 1; i <= rows_no; i++) {
for
(k = 1; k < i; k++)
Console.Write(
" "
);
for
(j = i; j <= rows_no; j++)
Console.Write(j +
" "
);
Console.WriteLine();
}
for
(i = rows_no - 1; i >= 1; i--)
{
for
(k = 1; k < i; k++)
Console.Write(
" "
);
for
(j = i; j <= rows_no; j++)
Console.Write(j +
" "
);
Console.WriteLine();
}
}
public
static
void
Main ()
{
int
rows_no = 7;
pattern(rows_no);
}
}
PHP
<?php
function
pattern(
$rows_no
)
{
for
(
$i
= 1;
$i
<=
$rows_no
;
$i
++)
{
for
(
$k
= 1;
$k
<
$i
;
$k
++)
echo
" "
;
for
(
$j
=
$i
;
$j
<=
$rows_no
;
$j
++)
echo
$j
.
" "
;
echo
"n"
;
}
for
(
$i
=
$rows_no
- 1;
$i
>= 1;
$i
--)
{
for
(
$k
= 1;
$k
<
$i
;
$k
++)
echo
" "
;
for
(
$j
=
$i
;
$j
<=
$rows_no
;
$j
++)
echo
$j
.
" "
;
echo
"n"
;
}
}
$rows_no
= 7;
pattern(
$rows_no
);
?>
Javascript
<script>
function
pattern( rows_no)
{
let i, j, k;
for
(i = 1; i <= rows_no; i++)
{
for
(k = 1; k < i; k++)
document.write(
" "
);
for
(j = i; j <= rows_no; j++)
document.write(j +
" "
);
document.write(
"<br/>"
);
}
for
(i = rows_no - 1; i >= 1; i--)
{
for
(k = 1; k < i; k++)
document.write(
" "
);
for
(j = i; j <= rows_no; j++)
document.write(j +
" "
);
document.write(
"<br/>"
);
}
}
let rows_no = 7;
pattern(rows_no);
</script>
Output :
1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6 7
Time Complexity : O(rows_no*rows_no) ,where rows_no is rows value taken from user.
Space Complexity : O(1) ,as we are not using any extra space.