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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2008, 11:59   #1
f1rst
Новичок
Джуниор
 
Регистрация: 28.10.2008
Сообщений: 2
По умолчанию какое число останется последним

помогите плз решить задачу
Сичталка
Числа от 1 до n расставлены по кругу. Вычёркиваем каждое второе число, начиная с 1. Нужно составить программу, которая определит, какое число останется последним и напечатает его. Исходное натуральное число-n(1<n<1 000 000).
помгите плз решить
f1rst вне форума Ответить с цитированием
Старый 28.10.2008, 12:41   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Была похожая задача, но способ не самый оптимальный. Лучше через массив делать. Но может и это подойдёт в качестве "идеи"
Код:
type kryg=^person;
person=record
    num:longint;
    Is:boolean;
    nextrec:kryg;
end;
var first,current,last:kryg;
    i,m,MM,n,KOLVO:longint;
BEGIN
    write('N=');readln(n);
    {write('M=');readln(m);}m:=2;//какого вычёркивать
    {MM:=0;}
    MM:=1;//подгоним под условие задачи, чтобы первый вычёркивался
    KOLVO:=n;
    last:=new(kryg);
    first:=last;
    for i:=1 to n do begin//создание и нумерация от 1 до n
        last^.num:=i;
        last^.Is:=true;
        last^.nextrec:=new(kryg);
        last:=last^.nextrec
    end;

    repeat//бесконечный перебор
    current:=first;
        while current<>last do begin
            if current^.Is then begin
               MM:=MM+1;
               if MM>m then MM:=1;
            end;
            if (MM=m)and(current^.Is) then begin
               current^.Is:=false;
               KOLVO:=KOLVO-1;
               {writeln('delete #', current^.num);}
            end;
            if KOLVO=1 then break;
            current:=current^.nextrec;
        end;
    until KOLVO=1;//пока ни останется одно число
        current:=first;
        while current<>last do begin
            if current^.Is then begin
               write('ostalsya #',current^.num);//поиск оставшегося
               readln;
               dispose(last);
               halt;
            end;
            current:=current^.nextrec;
        end;
END.

Последний раз редактировалось eoln; 28.10.2008 в 12:44. Причина: integer --> longint
eoln вне форума Ответить с цитированием
Старый 28.10.2008, 14:42   #3
f1rst
Новичок
Джуниор
 
Регистрация: 28.10.2008
Сообщений: 2
По умолчанию

спасибо
буду еще больше благодарен если выложите вариант с массивом
заранее спасибо
f1rst вне форума Ответить с цитированием
Старый 29.10.2008, 15:27   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Алгоритм есть, но проблема с массивом из 1 000 000 элементов.
puporev вне форума Ответить с цитированием
Старый 29.10.2008, 16:24   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

2f1rst Вообще-то это задача Иосифа Флавия. Есть простое рекурентное соотношение. Если это позволяют условия можете воспользоваться им. Описание, например в "Конкретная математика. Основание информатики." Р. Грэхем, Д. Кнут, О. Паташник. Там же сказано, что для миллиона формулы применяются всего 19 раз.
alexBlack вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какое у вас железо? SG13 Компьютерное железо 105 11.12.2009 17:55
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки urgu_st Помощь студентам 13 23.10.2007 09:14