С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 4

Определить k-ю цифру последовательности

16.11.2019, 16:38. Показов 2646. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пятиклассник Кирилл осваивает азы программирования под чутким руководством своего старшего брата Глеба. Сейчас Кирилл изучает работу оператора for…
Глеб дал брату следующую задачу: ввести три целых положительных числа a, b и N, а затем вывести последовательность чисел a, a + b, a + 2 ⋅ b, …, a + N ⋅ b. Увы, Кирилл забыл вывести пробел в качестве разделителя между числами, и в результате получилась длинная строка, состоящая из цифр …
Глеб, конечно, указал брату на его ошибку и заставил исправить программу, а сам задумался: как определить k-ю цифру в строке, выведенной первым вариантом программы (нумерация цифр в строке начинается с единицы)? К сожалению, Глеб не нашёл красивого решения этой задачи и предлагает её вам.
Единственная строка входного файла содержит числа a, b, N, k (1 ≤ a, b ≤ 1000, 1 ≤ N, k ≤ 10 в девятой).
мой код:
C++
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
36
37
38
39
40
41
42
43
44
45
46
47
#include <bits/stdc++.h>
using namespace std;
string k1 = "";
int main()
{
    ifstream cin ("input.txt");
    ofstream cout ("output.txt");
    int a,b,k,n,odl = 0;
    cin>>a>>b>>n>>k;
    if(k == 0)
    {
        cout << -1;
        return 0;
    }
    for (int i = 0; i <= n; i++)
    {
        k1 += to_string(a + b * i);
        if(k1.length() > k + 10)
        {
            cout << k1[k - 1];
            return 0;
        }
        else
        {
            if(k1.length() < k && k1.length() > 1010)
            {
                k1 = k1.substr(1000);
                ///k1.erase (0,1000);
                k -= 1000;
            }
        }
    }
    if (k1.length() < k)
    {
        cout<<-1;
    }
    else if (k == 1)
    {
        cout<<k1[0];
    }
    else
    {
        cout<<k1[k - 1];
        //cout<<k1.length();
    }
    return 0;
}
Помогите оптимизировать программу, пожалуйста

Добавлено через 5 минут
TLE выдает только в последних трех тестах
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2019, 16:38
Ответы с готовыми решениями:

Определить k-ю цифру последовательности
Здравствуйте, в общем, начал учить c++ и вот у меня затуп на задании)) Определить k-ю цифру последовательности 182764125216343… , ...

Определить k-ю цифру последовательности степеней 2
Добрый вечер! Не знаю, как выполнить без хранения последовательности. Выполнить задание без хранения последовательностей. Дано ...

Определить К-ю цифру заданной последовательности цифр
Помогите пожалуйста написать программу... Даны целое число k ( 1&lt;=k&lt;=150) и последовательность цифр 101102103...149150, в которой...

1
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
16.11.2019, 17:44
Лучший ответ Сообщение было отмечено HookErY как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int8_t foo(uint64_t a, uint64_t b, uint64_t n, uint64_t k) {
    auto digCnt = [](uint64_t n) {
        size_t cnt(0);
        do { ++cnt; } while (n /= 10);
        return cnt;
    };
 
    uint64_t num = a, subLen(1), nDec(digCnt(num));
    while (k > subLen * nDec) {
        if (n < subLen) return -1;
        n -= subLen;
        num += b * subLen;
        k -= subLen * nDec;
        nDec = digCnt(num);
        subLen = (uint64_t(pow(10, nDec)) - num) / b + !!(uint64_t(pow(10, nDec) - num) % b);
    }
    uint64_t numPos = (k - 1) / nDec;
    uint64_t digPos = (k - 1) % nDec;
    num += b * numPos;
    for (size_t i = nDec - digPos - 1; i; --i) num /= 10;
    return  n < numPos ? -1 : num % 10;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2019, 17:44
Помогаю со студенческими работами здесь

Определить k-ю цифру заданной последовательности цифр
Добрый вечер! Помогите пожалуйста написать сложнейшую задачу на языке С++.. Цель: Дано целое число k (1&lt;= k &lt;= 150) и...

Дано натуральное число k, определить k-ю цифру последовательности
Дано натуральное число k, определить k-ю цифру последовательности 110100100010000.... в которой выписаны подряд степени числа 10. Главная...

Дано натуральное число k. Определить k-тую цифру последовательности
Ребят привет. Помогите плиз. В общем вот задание: Дано натуральное число k. Определить k-тую цифру последовательности, в которой...

Определить k-ю цифру последовательности в которой выписаны подряд числа Фибоначчи
Условие: Задано натуральное число k. Определить k-ю цифру последовательности: 1123581321... в которой выписаны подряд ...

Определить k-ю цифру последовательности 1248163264..., в которой выписаны подряд степени 2
Вот задача: Выполнить задания без хранения последовательности значений. Задано натуральное число k. Определить k-ю цифру...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru