Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2020, 16:55   #1
Константин01
Пользователь
 
Регистрация: 11.05.2019
Сообщений: 21
По умолчанию k-ая цифра в натуральном ряду 123456...

Здравствуйте!

Необходимо вывести k-ую цифру натурального ряда 123456789101213141516...

Никаких идей кроме решения "в лоб" (выписать весь ряд до k цифры) нет. Прошу помощи.
Константин01 вне форума Ответить с цитированием
Старый 26.02.2020, 17:27   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

первые девять чисел однозначные (1..9) k<=9 result:=k
потом идут двузначные (10..99)
-- сколько их ?;
--9<k<=? *2(они же двузначные)
--а если бы мы начали сразу с них можно ли посчитать какая цифра на kk (=k+|-? ) месте?
--каждое число занимает ДВА места значит его номер ...
--и что же это за число(считали мы только их)
--а какая же нам нужна цифра ( первая или вторая )

потом пойдут трех- четырех- и более -значные.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 27.02.2020, 10:10   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Код:
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
using namespace std;
int main()
{
	int k;
	cin >> k;
//	for (int q = 1; q < 20000; q++)
//	{
//		k = q;
		int i = 1;
		char buf[16];
		int j;
		bool renew = true;
		int z = 1;
		while (true)
		{
			if (renew)
			{
				_itoa(i, buf, 10);
				j = 0;
				renew = false;
			}
			if (z == k)
				break;
			j++;
			if (!buf[j])
			{
				i++;
				renew = true;
			}
			z++;
		}
		cout << buf[j];
//	}
	return 0;
}
А что плохого в решении в лоб?)))
Сложность всего O(n)
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru

Последний раз редактировалось alexcoder; 27.02.2020 в 10:12.
alexcoder вне форума Ответить с цитированием
Старый 01.03.2020, 10:03   #4
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Цитата:
Сообщение от Константин01 Посмотреть сообщение
Необходимо вывести k-ую цифру натурального ряда 123456789101213141516...
А числа 11 нет?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 01.03.2020, 15:41   #5
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Да, про 11 - любопытно, но вероятно опечатка.

Мне кажется, что решение "в лоб" ещё проще - это же "треугольные числа" умноженные на 10, т.е. вычисления проводятся даже без цикла, только учесть, что в первом десятке всего 9 чисел. Одна проблема - целочисленный квадратный корень.

Нет, я ошибся. Здесь нет столь просто выражаемой зависимости.
Значит придётся просто вычитать длины.
Код:
program test;

var
  k: integer;
  i, Len, tens, n, start: integer;
begin
  k := 333;
  {поиск по i-значным числам}
  i := 1;
  tens := 9;
  Len := 0;
  start := 1; {считаем сразу первое i-значное число}
  repeat
    k := k - Len;
    Len := i * tens;
    Inc(i);
    tens  := tens * 10;
    start := start * 10;
  until k <= Len;
  start := start div 10;
  Dec(i);
  {n - цифра справа в k-том i-значном числе}
  writeln('k=', k);
  n := (k - 1) mod i;
  n := i - n - 1;
  k := (k - 1) div i;
  {вычисляем искомую цифру в числе}
  k := start + k;
  for i := 1 to n do
    k := k div 10;
  writeln(k mod 10);
end.

Последний раз редактировалось FPaul; 01.03.2020 в 17:50.
FPaul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить количество четных цифр в натуральном числе Dmitriy1991 Помощь студентам 0 16.12.2016 11:30
Рекурсивно вычислить количество цифр в заданном натуральном числе. В C++ vladrrom Помощь студентам 1 14.12.2016 03:58
Создание блок-схемы алгоритма: Определить, есть ли в натуральном трехзначном числе, введенном клавиатуры, только одна четная цифра Анастасия1997 Помощь студентам 4 20.02.2014 17:32
есть ли в натуральном числе 0? GrimSpirit Общие вопросы C/C++ 5 05.11.2013 00:28
Сравнение ячеек в ряду stck SQL, базы данных 4 17.05.2011 12:14