9 / 1 / 0
Регистрация: 01.07.2019
Сообщений: 26

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

09.07.2019, 20:29. Показов 3584. Ответов 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_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
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_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
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_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru