Как написать песочные часы

Добрый день, помогите с реализацией. Задача: Напишите класс который выводит «песчаные часы» из заданого символа и количества шагов.
Пример Символ 8( шагов 5)

.8888888888
..88888888
….888888
……8888
……..88
……8888
….888888
..88888888
.8888888888

Я делал так, а как дальше …..

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
Scanner sc = new Scanner(System.in);
        int a=sc.nextInt();
        char sim = '8';
        String strDo = "";
        for (int i =0; i<a;i++) {
            System.out.print(strDo);
            for (int j = i; j < a; j++)
                System.out.print(sim);
            for (int k = a; k > i; k--)
                System.out.print(sim);
            strDo+=" ";
            System.out.println("");
        }

Добавлено через 49 минут
Вот работает))

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    
   public class Main {
public static String sim;
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
        System.out.println("Введи символ:");
        sim = sc.nextLine();
        System.out.println("Введи количество:");
        int a=sc.nextInt();
       draw(a);
 
  }
public static void draw(int w){
    draw(w, 0);
}
 
    public static void draw(int W, int s){
        stars(W, s);
        if (W > 2) {
            draw(W-2, s+1);
            stars(W, s);
        }
    }
    public static void stars(int n, int s){
        if(s > 0){
            System.out.print(" ");
            stars(n, s-1);
        } else  if (n > 0){
            System.out.print(sim);
            stars(n-1, s);
        } else {
            System.out.println();
        }
    }
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Нужно написать класс который выводит песочные часы из звездочек.

мой код:

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

Dr.Joe's user avatar

Потому что в тесте нет пробелов после звезд, а у тебя есть. Сам только что делал ее, там надо проверки добавить на простановку space. Т.Е. если уже вывелись все звезды что бы он не ставил . и пробела в этом месте тоже ошибка будет

for (int i = 1; i <= columnCount; i++) {
        System.out.println();

я в после прохождения второго цикла делаю перевод строки + делаю проверку если это последний этап цикла то не делаю перевод строки

Tiarait's user avatar

Tiarait

1,9801 золотой знак9 серебряных знаков21 бронзовый знак

ответ дан 28 окт 2022 в 12:23

Владимир's user avatar

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

Show hidden 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

  • Read
  • Discuss
  • 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

  • Read
  • Discuss
  • 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.

    Понравилась статья? Поделить с друзьями:
  • Как написать песню со смыслом
  • Как написать песню сестре
  • Как написать песню ребенку
  • Как написать песню программа
  • Как написать песню про россию