![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
EXE |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 47 Пол: Мужской Реальное имя: Диман Репутация: ![]() ![]() ![]() |
Задача
На площадь выводят N человек, приговоренных к смерти, каждому из которым присвоен уникальный номер от 1 до N. Их расставляют по кругу по часовой стрелке по порядку. Казнь производится следующим образом: отсчитывают M человек, начиная с человека, стоящего после только что казненного, и этого M-го человека уводят на казнь. В начале казни отчет ведется от человека с номером 1. Узнать, человека с каким номером казнят K-м? С клавиатуры вводятся числа: N, M, K 1<=N<=30000 1<=M<=30000 1<=K<=N Я тут написал вроде, но не уверен. Посмотрите и подправьте если чего не так: :low: var -------------------- Время есть сущность всех вещей.
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
EXE
Ясно, исходника у тебя никакого нет... Разбираться в приведенной программе будешь сам. Код Const n = 11; m = 7; k = 3; Const liRange = SizeOf(LongInt) * 8; Type TBigReg = Array[1 .. (n div liRange) + Byte((n mod liRange) > 0)] Of LongInt; Procedure bit_info(bit: LongInt; Var block, offset: Byte); Begin block := Succ(Pred(bit) div 32); offset := Byte( ((bit mod 32) <> 0)) * 32 - (bit mod 32); end; Function is_bit_set(Var x: TBigReg; bit: LongInt): Boolean; Var bBlck, bOffs: Byte; Begin bit_info(bit, bBlck, bOffs); is_bit_set := (((x[bBlck] shr bOffs) and $1) = $1); End; Procedure xorBit(Var x: TBigReg; bit: LongInt); Var bBlck, bOffs: Byte; Begin bit_info(bit, bBlck, bOffs); x[bBlck] := x[bBlck] xor (LongInt($1) shl bOffs) End; Procedure reset_bit(Var x: TBigReg; bit: LongInt); Begin If is_bit_set(x, bit) Then xorBit(x, bit) End; Procedure set_bit(Var x: TBigReg; bit: LongInt); Begin If not is_bit_set(x, bit) Then xorBit(x, bit) End; Function down_next(Var people: TBigReg; k, every: LongInt): LongInt; Var curr_bit, count, i: LongInt; Function next_bit(x: LongInt): LongInt; Begin Inc(x); If x > n Then x := 1; next_bit := x End; Begin curr_bit := 0; For i := 1 To k Do Begin count := 0; While count < every Do Begin curr_bit := next_bit(curr_bit); inc( count, Byte(is_bit_set(people, curr_bit)) ) End; reset_bit(people, curr_bit) End; down_next := curr_bit; End; Var all: TBigReg; i: integer; begin For i := 1 To n Do set_bit(all, i); WriteLn('this was number: ', down_next(all, k, m)) end. |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 6:38 |