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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2009, 15:30   #1
kent2102
 
Регистрация: 07.04.2009
Сообщений: 3
По умолчанию Дано натуральное k. Напечатать k-ю цифру последовательности 149162536..., в которой выписаны подряд квадр

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

Помогите запустить?

Код:
program lb2;
var a,t,p:real; i,k,s:integer;
begin
read(k);
i:=1;
for i:=1 to 20 do
begin
a:=i*i;
write(a);
end;
begin
if (a>=10) and (a<100) then
s:=s+2
else
s:=s+1;
for i:=1 to (s-k) do
begin
if s>k then
t:=a-trunc(a/10)*10;
write('t=',t)
else
if s=k then
p:=trunc(a/10);
write('p=',p)
end;end;end.

Спасибо!!!

Последний раз редактировалось Stilet; 20.02.2011 в 16:59.
kent2102 вне форума Ответить с цитированием
Старый 07.04.2009, 15:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Помоему тут стратегия вкорне неверна.
Тут мне кажется проще будет с нуля все переделать.
Преврати вводимое число в строку и тупо получи i-тый элемент этой строки...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2009, 15:51   #3
kent2102
 
Регистрация: 07.04.2009
Сообщений: 3
По умолчанию

Stilet: А как это ещё сделать не подскажешь пожалуйста?
kent2102 вне форума Ответить с цитированием
Старый 07.04.2009, 16:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот, реализация идеи Stilet'а, только с оптимизацией, чтобы не упереться в максимальную длину строки:
храним только сумму длин всех ранее встреченных чисел и одну строчку, в которой текущее значение квадрата числа.

Код:
{
  Дано натуральное k. 
    Напечатать k-ю цифру последовательности 149162536..., 
    в которой выписаны подряд квадраты всех натуральных чисел.}

var k, CurLen : integer;
  i, iSQR : Longint;
  sSQR : string;
begin
  WriteLn('Введите k');
  ReadLn(k);
  CurLen := 0;
  i := 1;
  iSQR := SQR(i);
  str(iSQR,sSQR);
  WriteLn('>'+sSQR+'<');
  while (CurLen+Length(sSQR)) < K do 
  begin
    CurLen := CurLen + Length(sSQR);
    inc(i);
    iSQR := SQR(i);
    str(iSQR,sSQR);
    WriteLn('>'+sSQR+'<');
  end;
  WriteLn(k:1,'-я цифра в последовательности = ',Copy(sSQR,K-CurLen,1));
end.
операторы WriteLn('>'+sSQR+'<'); здесь просто для красоты (и тестирования).
эти строчки можно (и нужно!) удалить!

Последний раз редактировалось Serge_Bliznykov; 07.04.2009 в 16:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.04.2009, 16:21   #5
kent2102
 
Регистрация: 07.04.2009
Сообщений: 3
По умолчанию

Спасибо Serge_Bliznykov!
kent2102 вне форума Ответить с цитированием
Старый 07.04.2009, 17:10   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я то думал просто превратить в число и взять S[k]-й элемент...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2009, 22:11   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Stilet, Виталий, я понял, что Вы предлагали сделать
можно и так сделать.
но, дело в том, что в этом случае K не может быть более 255...
а алгоритм не сильно проще получается...
а при алгоритме, реализованном в подходе и 30000-й элемент легко находится )) (а если K и CurLen сделать типа longint - так и больше найдётся... ;-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2011, 19:52   #8
Наралм
 
Регистрация: 14.12.2010
Сообщений: 4
По умолчанию

А помогите пожалуйста сделать такую же задачу только с Сишке!!!!!!!!!

В чистом Си в смысле.....
очень прошу!!!!

Последний раз редактировалось Serge_Bliznykov; 20.02.2011 в 16:53.
Наралм вне форума Ответить с цитированием
Старый 20.02.2011, 16:56   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Наралм, так в чём проблема?
Вы знаете "чистый" C ?
Тогда перепишите предложенный выше код с Delphi на C


p.s. к сожалению я не знаю ни "чистого", ни "грязного" C - поэтому конкретным кодом помочь не могу...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2011, 17:35   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка:
Код:
int k=7;
int _tmain(int argc, _TCHAR* argv[])
{
	int i=1,l=0,e,m,r=0;
	for(k;k;i++){
		e=i*i;m=0;
		for(int p=e;p && k;p/=10,k--) m++ ;
	};
	for(;m;m--){ 
		l=e%10;
		e/=10;
	}
	printf("%d",l);getchar();
	return 0;
}
Особо не проверял
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PCI. Чтение множества данных подряд Min Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 07.04.2009 03:40
Определить k-ую цифру последовательности Фибоначчи и последовательности натуральных чисел. Med Помощь студентам 1 20.03.2009 11:40
Дано натуральное число n. Можно ли представить его в виде суммы двух квадратов натуральных чисел? Сеня Помощь студентам 3 29.01.2009 01:17
Дано четырехзначное число, заданное в символьном виде, например, '1954'. Напечатать его текстом, например gred Помощь студентам 13 31.03.2008 22:24
СОХРАНЕНИЕ В 23 ФАЙЛА ПОДРЯД!!!! _FL@ER_ Помощь студентам 6 26.06.2007 22:31