10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
1

Задача "Натуральный ряд чисел"

26.07.2013, 16:54. Показов 10486. Ответов 70
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
(Время: 1 сек. Память: 16 Мб)
Натуральные числа записаны в строку без каких-либо разделителей. Начало этой строки имеет вид 123456789101112131415161718192021… .

Требуется написать программу, которая определит первое вхождение десятичной записи заданного числа N в этой строке.

Входные данные

Входной файл INPUT.TXT содержит заданное число N (1 <= N <= 104).

Выходные данные

Выходной файл OUTPUT.TXT должен содержать одно число – позицию, начиная с которой в строке записано первое вхождение заданного числа. Нумерация позиций начинается с единицы.

Предложите свои идеи по решению задачи.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.07.2013, 16:54
Ответы с готовыми решениями:

Натуральный ряд
Еще вопрос:&quot;Сколько чисел натурального ряда необходимо перемножить, чтобы их произведение превысило...

Построить односвязный список из входных последовательностей натуральный чисел
Построить односвязный список из входных послед-ей натуральный чисел удалить из списка узлы...

Натуральный ряд чисел
серия цифр Числа натурального ряда выписали подряд, так что образовалась последовательность:...

Отразить основание, название, алфавит и натуральный ряд чисел (20 чисел) системы счисления
Составить таблицу, в которой отразить: основание, название, алфавит и натуральный ряд чисел (20...

Натуральный ряд.
Составить программу вычисления суммы чисел натурального ряда. Натуральный ряд содержит k чисел....

70
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
26.07.2013, 17:00 2
1) Сгенерируй строку со всей последовательностью этих чисел.
2) Найди нужное число в этой строке.
0
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
26.07.2013, 17:33  [ТС] 3
Цитата Сообщение от Dani Посмотреть сообщение
Сгенерируй строку со всей последовательностью этих чисел.
Сколько нужно генерировать чисел и приблизительно какой нужен размер массива?
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
26.07.2013, 17:41 4
Добавляй лучше в string последовательные числа, пока длина не станет больше 10^4 (как в условии - максимальное кол-во цифр). Найдешь, какое-то число, вот до него и добавляй, либо подсчитай на листике до какого числа нужно добавлять.
Вот ты узнал число, до которого нужно добавлять последовательные числа, чтобы длина получилась больше либо равна 10^4. Потом просто генеришь хоть куда последовательность.
0
1 / 0 / 1
Регистрация: 17.04.2013
Сообщений: 11
26.07.2013, 18:06 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <fstream>
#include <string>
#include <iostream>
 
using namespace std;
 
int main()
{
    string str;
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    fin >> str;
    char value('8');
    size_t first_value_in_str(str.find_first_of(value) + 1);
    fout << first_value_in_str;
    return 0;
}
0
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
26.07.2013, 18:27  [ТС] 6
fan_stud можете объяснить код?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.07.2013, 22:30 7
Цитата Сообщение от Dani Посмотреть сообщение
Сгенерируй строку со всей последовательностью этих чисел.
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
Сколько нужно генерировать чисел и приблизительно какой нужен размер массива?
9 + 2*90 + 3*900 + 4

Добавлено через 1 минуту
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
можете объяснить код?
ищется подстрока в строке, осталось сгенирировать саму строку
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
26.07.2013, 22:32 8
ALEXKIRNAS, fan_stud не понял условия задачи по ходу.
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
27.07.2013, 12:31 9
fan_stud, ерунда какая-то. Во-первых, в файле INPUT.TXT этой строки нету, а ты решил просто взять и сделать "fin >> str;"
Во-вторых, эту задачу не надо решать в лоб.
Число N четырёхзначное.
Так надо проанализировать, в каких случаях это число может стать подстрокой.
Ну, например: если цифры идут по порядку - число из первого десятка. (6789) =6,7,8,9
далее проверять случаи, когда это два двузначных числа (1011) = 10, 11
одно двузначное и начальные цифры от следующего за и перед ним (6373) =36, 37,38
аналогично - трёхзначные (5645) = 564, 565
аналогично - соседние четырёхзначные (9992)= 1999, 2000
Ну и, наконец, это самостоятеельное четырёхзначное число 1991
(возможно пропустил какой-то случай, например на границе двузначных и трёхзначных и.т.п.)

Вот и построй условия для каждого из этих случаев. А потом, найди, какой из них раньше встречается.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
27.07.2013, 13:31 10
Kuzia domovenok, число N может быть и однозначным и двухзначным и трехзначным. Слишком много условий выходит. А так подход верный, только слишком много вариантов нужно разобрать, можно что-то и упустить.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2013, 15:27 11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Так надо проанализировать, в каких случаях это число может стать подстрокой
По-моему, в любом случае, при достаточной длине исходной строки. Вот об этом ничего не сказано.

Добавлено через 6 минут
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
#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
 
 
int main()
{    
    string str;
    string number = "28";
    string temp;
    stringstream s;
    int i = 1;
    do
    {
      s << i;
      temp = s.str();
      s.str("");
      str += temp;
      cout << str << endl;
      ++i;
    } while (temp != number);
    int ind = str.size() - temp.size() + 1;
    cout << ind << endl;
 
    system("pause");
    return(0);
}
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
27.07.2013, 15:36 12
Цитата Сообщение от alsav22 Посмотреть сообщение
По-моему, в любом случае, при достаточной длине исходной строки.
Суть не в том, что появится число в строке или нет! Ясно, что появится.
А суть в том, что рассматривать надо не всю строку, а генерировать те подстроки, в которых может появиться это число!
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2013, 16:15 13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А суть в том, что рассматривать надо не всю строку
А какая она вся? Она, вообще, задаётся как-то?

Добавлено через 6 минут
Как вариант, вывести формулу длины строки с заданной последовательностью, по заданному числу. Например, число 28, длина строки, с заданной последавательностью, 47. Дальше просто.
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
27.07.2013, 17:26 14
вот что получилось
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
#include <iostream>
#include <fstream>
#include <cmath>
 
int main()
{
    std::ifstream file("input.txt");
    std::ofstream out("output.txt");
    int x; file >> x;
    int rank = std::log10(x) + 1;
    int result = 1;
    switch (rank) {
        case 1:
            result = x;
            break;
        case 2:
            result = 9 + 2 * (x - 10) + 1;
            break;
        case 3:
            result = 9 + 180 + 3 * (x - 100) + 1;
            break;
        case 4:
            result = 9 + 180 + 2700 + 4 * (x - 1000) + 1;
            break;
        case 5:
            result = 9 + 180 + 2700 + 36000 + 1 - 5;
            break;
    }
    out << result;
    return 0;
}
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2013, 17:34 15
Цитата Сообщение от Olivеr Посмотреть сообщение
вот что получилось
не все так просто, протестируйте, например, на 101
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
27.07.2013, 17:38 16
Цитата Сообщение от Thinker Посмотреть сообщение
не все так просто, протестируйте, например, на 101
ответ 193
число 101 включает 9 однозначных чисел (9 символов), 90 двузначных (180 символов) и 1 трехзначное (3 символа) + 1 = 193
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2013, 17:39 17
Цитата Сообщение от Olivеr Посмотреть сообщение
ответ 193
число 101 включает 9 однозначных чисел (9 символов), 90 двузначных (180 символов) и 1 трехзначное (3 символа) + 1 = 193
101 - ответ 10. задание внимательно прочтите.
1
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
27.07.2013, 18:09 18
Цитата Сообщение от Thinker Посмотреть сообщение
101 - ответ 10. задание внимательно прочтите.
так вот в чем дело...
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
27.07.2013, 18:27 19
Если число однозначное - все просто.
Если двухзначное:
--Если вторая цифра минус первая = 1, то число встречается среди первых 9 однозначных.
-- Если расмотреть стык aX Yb, то если X = 9, то a = Y - 1, b = 0. Если X != 9, то такое совпадение будет только если Y <= X. Тогда a = Y, b = X + 1.
-- Ну а в противном случае число появится в последовательности только когда его туда напишут.
Для трехзначных можно запилить что-то схожее, но мне лень, там много больше случаев разбирать.

Добавлено через 7 минут
Ну еще для двухзначных нужно не забыть про стык однозначных и двухзначных, там тоже проскакивает число 91.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2013, 18:33 20
nonedark2008, это все давно уже поняли.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
мне лень
смысл начинать объяснять то, на что банально сил не хватает...
0
27.07.2013, 18:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2013, 18:33
Помогаю со студенческими работами здесь

Обобщенный натуральный ряд
Нет, я не ошибся, господа. Не гармонический, а именно натуральный. Возникла мысль найти сумму n...

Проверить полноту метрического пространства N (натуральный ряд)
Здравствуйте, помогите: проверить полноту метрического пространства N (натуральный ряд)

Задача на ряд чисел
Допустим, у вас есть случайный числовой ряд. Если для каждого числа Ai в этом ряду посчитать...

Дан натуральный отрезок чисел [A,B]. Разработать метод, который возвращает массив,состоящий из тех чисел этого отрезка, суммы
Дан натуральный отрезок чисел . Разработать метод, который возвращает массив,состоящий из тех чисел...

Десять раз генерировать ряд случайных чисел от 0 до 99 . Каждый ряд также должен иметь произвольную длину . В каждом ряд
Десять раз генерировать ряд случайных чисел от 0 до 99 . Каждый ряд также должен иметь произвольную...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru