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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2012, 12:35   #1
sidestep
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 93
По умолчанию игра Считалка

N человек играют в следующую игру: стоя в кругу они начинают считалку. Счёт идёт до числа k. Игрок, на которого падает счёт наше число, выбывает, а считалка начинается сначала со следующего по кругу игрока. Выигрывает тот, кто остался последним в кругу. Считалка начинается со следующего игрока после выбывшего.

Надо сделать через циклические списки
Но есть ошибочка: программа запускается, но на этапе выполнения... вылетает окно с предложением бреак, продолжить...

ошибка при удалении узла в списке, я не совсем понимаю, что не так... вроде ввел все нужные счетчики и слежу когда останется один узел в списке... слежу чтоб бегунок обнулялся при удалении вершины. Помогите!

Вот код:

Код:
#include <stdio.h>
#include <conio.h>
#include <conio.h>
#include <string.h>
struct Node
{
	int count;
	Node* next; 
};
typedef Node* PNode;

void deleteNode (PNode& Head, PNode OldNode)
{
	PNode q = Head;
	if (Head == OldNode)
		Head = OldNode->next;
	else 
	{
		while (q && q->next != OldNode)// ищем элемент
			q = q->next;
		if (q==NULL) return; // если не нашли - выход
		q->next = OldNode->next;
	}
	delete OldNode; // освобождаем память
}
int main() {

	int N;
	printf("kol-vo igrokov: \n");
	scanf("%i", &N);

	int number;
	printf("vvedite chislo dlya schilaki: \n");
	scanf("%i", &number);

	PNode Head = new Node;
	PNode current = new Node;
	if (N > 1) {
		Head->count = 1;
		Head->next = NULL;
		current = Head;
		for (int i = 2; i <= N; i++) {
			current->next = new Node;
			current = current->next;
			current->count = i;
			current->next = NULL;
		}
	}

	current->next = Head;

	//printNode(Head);
	int beg = 1;

	PNode temp = new Node;
	int ccount = N;

	while (current) {
		if (ccount == 1) {
			printf("\n%i", current->count);
			break;
		} else {
			temp = current->next;
			if (beg == number) {
				deleteNode(Head, current);
				beg = 1;
				ccount--;
			}
			beg++;
			current = temp;
		}
	}
	getch();
	return 0;
}
sidestep вне форума Ответить с цитированием
Старый 16.04.2012, 13:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

[оффтоп]
кстати, это классическая задача:
Задача Иосифа Флавия или считалка Джозефуса — известная математическая задача с историческим подтекстом.
[/оффтоп]
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2012, 13:46   #3
sidestep
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 93
По умолчанию

Спасибо конечно, но мне нужна помощь, чтобы эту программу доделать правильно
sidestep вне форума Ответить с цитированием
Старый 16.04.2012, 18:59   #4
sidestep
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 93
По умолчанию

что никто не поможет?
sidestep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра Кристинка89 C++ Builder 2 17.03.2011 01:39
Игра на C# ЧеширскийКот Общие вопросы .NET 3 11.04.2009 11:25