Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
9 / 1 / 0
Регистрация: 01.07.2019
Сообщений: 26

printN. Реализуйте процедуру, которая выводит на экран последовательность в соответствии с условием

09.07.2019, 20:29. Показов 3530. Ответов 15

Студворк — интернет-сервис помощи студентам
Ввод_1:
3

Вывод_1:
122333

Ввод _2:
4

Вывод _2:
1223334444

Ввод _3:
2

Вывод_3:
122

static void printN(int n){
...
}
Простая задача, но в голову совершенно не приходит решение почему-то...кроме бесконечно огромной кучи циклов, которые совсем не хочется писать. Может подскажет кто-то коротенькое решение?
Заранее благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2019, 20:29
Ответы с готовыми решениями:

Lost connection to MySQL server at 'reading initial communication packet', system error: 111
Отправила сайт на хостинг при помощи Filezilla и базу данных импортировала на хостинг, в браузере ввожу адрес сайта, вместо сайта:...

Программа вызывает процедуру, которая выводит строку, символ или число в соответствии с вариантом
Программа вызывает процедуру, которая выводит строку, символ или число в соответствии с вариантом. Параметры передаются через регистры....

Программа, которая выводит на экран символы и их десятичные и двоичные коды в соответствии с кодовой таблицей
Программа, которая выводит на экран символы и их десятичные и двоичные коды в соответствии с кодовой таблицей

15
 Аватар для Lumber
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
09.07.2019, 20:40
почему куча циклов? всего два вложенных цикла for.
0
9 / 1 / 0
Регистрация: 01.07.2019
Сообщений: 26
09.07.2019, 20:45  [ТС]
Ну даже два вложенных цикла - это совсем не оптимальное решение. Наверняка ж есть проще...
0
 Аватар для Lumber
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
09.07.2019, 20:55
проще вряд ли. Но без вложенного цикла можно обойтись - сделать один цикл (нужно рассчитать общее количество чисел для печати) и сделать функцию которая по номеру позиции вычисляет число которое на этой позиции должно быть.
0
9 / 1 / 0
Регистрация: 01.07.2019
Сообщений: 26
09.07.2019, 21:00  [ТС]
Звучит-то неплохо) Только в виде кода это как написать?
0
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
09.07.2019, 22:47
С одним циклом for. Для чисел от 1 до 9
Java
1
2
3
4
5
6
7
public static void printN(int n) {
   String mask = "111111111";
   for (int i = 1; i <= n; i++) {
      int k = Integer.parseInt(mask.substring(0, i));
      System.out.print(i * k);
   }
}
Добавлено через 27 минут
Хотя, конечно, что может быть проще чем это?
Java
1
2
3
4
5
public static void printN(int n) {
   for (int i = 1; i <= n; i++) 
      for (int j = 1; j <= i; j++)
         System.out.print(i);
}
И никаких ограничений по диапазону n

Добавлено через 7 минут
Про ограничения сказала глупость. Максимальное число n = 68, которое мой эклипс смог обработать и вывести результат на консоль
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
09.07.2019, 23:42
Следует написать функцию типа repeatNTimes(char, int)для второго случая. Первое решение прикольное, но если посмотреть поближе, то все эти преобразования стрингов в инты не очень, но возможно, если переписать На лонг, то будет норм
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
09.07.2019, 23:49
Цитата Сообщение от xoraxax Посмотреть сообщение
возможно, если переписать на лонг, то будет норм
Я тоже сначала делала с лонгом, но для n = 10, все равно сам принцип уже не работает: 10 * 1111111111 != 10101010101010101010. Поэтому решила использовать диапазон интов. Или тут фишка с лонгами в чем-то другом?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
10.07.2019, 00:07
Цитата Сообщение от alicesmagic3d Посмотреть сообщение
Про ограничения сказала глупость. Максимальное число n = 68, которое мой эклипс смог обработать и вывести результат на консоль
Не знаю, что у тебя за проблемы с эклипсом (да и при чём тут эклипс?). У меня вывелось printN(6969).
За 47 секунд, правда.

Но если буферизовать вывод, например, так:

Java
1
2
3
4
5
6
7
    private static void printN(int n) {
        final var buffer = new StringBuilder((1 + n) * n / 2);
        for (int i = 1; i <= n; i++) {
            buffer.append(String.valueOf(i).repeat(i));
        }
        System.out.println(buffer.toString());
    }
или так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
private static void printN(int n) {
        try {
            final BufferedWriter w = new BufferedWriter(new PrintWriter(System.out), (1 + n) * n / 2);
            for (int i = 1; i <= n; i++) {
                w.write(String.valueOf(i).repeat(i));
            }
            w.newLine();
            w.flush();
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }
то printN(6969) у меня занимает 3 секунды.

Никогда не печатайте в OutputStream без буфера.
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
10.07.2019, 00:45
Цитата Сообщение от korvin_ Посмотреть сообщение
String.valueOf(i).repeat(i));
Ругается вот так: The method repeat(int) is undefined for the type String

Добавлено через 7 минут
Цитата Сообщение от korvin_ Посмотреть сообщение
Никогда не печатайте в OutputStream без буфера.
Спасибо! Попробую разобраться с этим.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
10.07.2019, 00:46
Цитата Сообщение от alicesmagic3d Посмотреть сообщение
Ругается вот так: The method repeat(int) is undefined for the type String
Java
1
2
3
4
5
6
7
8
9
10
11
package java.lang;
...
public final class String
    ...
    /**
     ...
     *
     * @since 11
     */
    public String repeat(int count) {
        ...
Ну сделай всё так же, только с внутренним циклом, например:

Java
1
2
3
4
5
6
7
8
9
    private static void printN_builder(int n) {
        final var buffer = new StringBuilder((1 + n) * n / 2);
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                buffer.append(i);
            }
        }
        System.out.println(buffer.toString());
    }
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
10.07.2019, 01:24
Похоже все-таки в эклипсе настройки какие-то ограничивают вывод.
https://youtu.be/yomgG8j7Ar8
Даже с буфером:
n = 68 выводит строку на консоль, а n = 69 и выше вроде как тоже что-то выводит, только ничего не видно. Хотя полоса прокрутки появляется. Без буфера было тоже самое. Хотя и медленнее, конечно.

И еще рискну спросить.
В строке final var buffer = new StringBuilder((1 + n) * n / 2); ругается на var.
Я заменила var на StringBuilder. Вроде бы все работает. Зачем тут var?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
10.07.2019, 01:38
Цитата Сообщение от alicesmagic3d Посмотреть сообщение
Зачем тут var?
Чтобы не писать StringBuilder два раза. Это тоже с 11-й джавы.

Добавлено через 5 минут
Цитата Сообщение от alicesmagic3d Посмотреть сообщение
Похоже все-таки в эклипсе настройки какие-то ограничивают вывод.
Попробуй так:

Java
1
2
3
4
5
6
7
8
9
10
11
    private static void printN(int n) {
        for (int i = 1; i <= n; i++) {
            final StringBuilder buffer = new StringBuilder((1 + n) * n / 2);
            for (int j = 1; j <= i; j++) {
                buffer.append(i);
            }
            System.out.print(buffer.toString());
            System.out.flush();
        }
        System.out.println();
    }
69 у меня выводит нормально, а вот 6969 только конец. Возможно, переполнение буфера.

Добавлено через 1 минуту
Думаю, тут всё же дело не в эклипсе (у меня-то IDEA), а в ограничениях STDOUT операционной системы.
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
10.07.2019, 01:54
С этим кодом тоже самое)
Проверила дальше:
68+ перестает выводить результат
204+ перестает выводить полосу прокрутки
264+ полностью очищает консоль (убирает строку "Введите целое число и нажмите <Enter>" и зеленые цифры ввода).
Да и ладно. Спасибо большое за помощь!!!

Добавлено через 4 минуты
Цитата Сообщение от korvin_ Посмотреть сообщение
Думаю, тут всё же дело не в эклипсе, а в ограничениях STDOUT операционной системы.
Может и так. У меня ноут хиленький совсем.
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
10.07.2019, 07:05
alicesmagic3d, не в эклипсе дело. У меня тож эклипс, 69+ выводит без проблем
0
54 / 45 / 18
Регистрация: 09.02.2015
Сообщений: 165
11.07.2019, 07:31
Не то написал

Добавлено через 14 минут
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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Test {
    private static String[] enumNum = new String[2000]; //С Integer.MAX_VALUE не запускается.
 
    //Заполняем массив шаблона последовательности
    static {
        for (int i = 0, k = 1; i < 2000; i++, k++) {
            enumNum[i] = "";
            for (int j = 1; j <= k; j++) {
                enumNum[i] = enumNum[i] + k;
            }
        }
    }
 
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int temp = Integer.parseInt(reader.readLine());
        for (int i = 0; i < temp; i++) {
            System.out.println(enumNum[i]);
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2019, 07:31
Помогаю со студенческими работами здесь

Написать процедуру, которая выводит на экран строку, состоящую из звездочек
Написать процедуру, которая выводит на экран строку, состоящую из звездочек. Длина строки (количество звездочек) является параметром...

6.4. Составьте процедуру, которая выводит на экран сумму элементов массива
Составьте процедуру, которая выводит на экран сумму элементов массива. Массив передавать процедуре в качестве параметра.

Как написать процедуру которая выводит на экран строки таблицы?
Как написать процедуру которая выводит на экран строки таблицы?

Создать процедуру, которая выводит значения элементов массива на экран
Задание 4. Создать процедуру, которая выводит значения элементов массива на экран.

Составить процедуру Stars, которая по данному N выводит на экран строку из N символов *
Составить процедуры Stars, которая по данному N выводит на экран строку из N символов «*». Используя эту процедуру, вывести на экран 3...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru