Вывод людей из круга - C (СИ)
Формулировка задачи:
Помогите пожалуйста!
Даны натуральные n, m. Предпологается, что n человек встают в круг и получают номера, считая против часовой стрелки, 1, 2, ..., n. Затем, начиная c первого, также против часовой стрелки отсчитывается m-й человек (поскольку люди стоят по кругу, то за n-м человеком стоит первый ). Этот человек выходит из круга, после чего, начиная со следующего, снова отсчитывается m-й человек и так до тех пор, пока из всего круга не останется один человек. Определить его номер. Для решения этой задачи полезен список, соединяющий в кольцо так, как показано на рис. 28.
Решение задачи: «Вывод людей из круга»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> struct Node { int num; Node* next; }; int main(int argc, char* argv[]) { int n,m,i,j; Node *Curr,*Prev,*Start; printf("n="); scanf("%d",&n); printf("m="); scanf("%d",&m); for (i=1; i<=n; i++) { Curr=(Node*) malloc(sizeof(Node)); Curr->num=i; if (i == 1) Start=Curr; else { Prev->next=Curr; if (i == n) Curr->next=Start; } Prev=Curr; } Curr=Start; while (1) { printf("%d ",Curr->num); Curr=Curr->next; if (Curr == Start) { printf("\n"); break; } } Curr=Start; for (i=1; i< n; i++) { for (j=1; j<=m; j++) { Prev=Curr; Curr=Curr->next; } Prev->next=Curr->next; free(Curr); Start=Prev; Curr=Prev; while (1) { printf("%d ",Curr->num); Curr=Curr->next; if (Curr == Start) { printf("\n"); break; } } } free(Curr); return 0; }
Объяснение кода листинга программы
В этом коде используется структура данных очередь
(или круг
), в которой все элементы кроме первого имеют ссылку на предыдущий элемент. Код начинается с создания узла (структуры данных) для числа n, а затем добавляет остальные числа в круг, используя алгоритм добавить в круг
. Затем он выводит все числа в круге, используя алгоритм вывести круг
. Затем код повторяет этот процесс для каждого числа в диапазоне от 1 до n-1, чтобы создать оставшиеся узлы, используя алгоритм добавить в круг
и вывести круг
. В конце кода все узлы освобождаются, и возвращается 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д