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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2018, 15:41   #1
oqi
 
Регистрация: 26.06.2018
Сообщений: 7
По умолчанию [C++] Игра в города. Помогите найти ошибку

Задача: Широко известна игра "Города". Называется какой-нибудь город, допустим, "Саратов". Кончается на "в", значит требуется назвать другой город,у которого в названии первая буква "в". Это может быть "Воронеж". Следующий город должен начинаться на "ж" и т.д. Запрещено повторять название городов. Надо написать программу, которая из набора названий городов(все названия разные) строит цепочку максимальной длины.
___________________________________ ___________________
Помогите найти ошибку, выводит вроде правильно, но не максимальную цепочку
___________________________________ ___________________

Код:
#include "stdafx.h" 
#include "conio.h" 
#include "iostream" 
#include "Windows.h" 
#include "fstream" 
#include <vector> 
using namespace std;


struct arr { char gorod[20]; };//структура для города
int main()
{
	SetConsoleOutputCP(1251);
	SetConsoleCP(1251);
	setlocale(LC_ALL, "Russian");
	fstream text;
	text.open("Text.txt");
	int n;
	char s[20];
	int i = 0;
	cout << "Введите количество городов: " << endl;
	cin >> n;//считали кол-во городов
	vector <arr> vse;//вектор всех городов
	vse.resize(n);
	for (int i = 0; i < n; ++i)
	{
		cout << "Введите город" << endl;
		cin >> vse[i].gorod;
	}
	int ind = 0;//rand
	strcpy_s(s, vse[ind].gorod);//первый город записали в s;
	cout << vse[ind].gorod << endl;//вывели его
	vse[ind].gorod[0] = 0;//чтоб потом исключить

	for (int j = 0; j < n; ++j)//бежим по всем городам
	{
		if (vse[j].gorod[0] != 0)//если мы еще не использовали его
		{
			char symvol_pos = 0;
			symvol_pos = s[strlen(s) - 1];//проверяем посл букву слова пользователя
			for (int i = 0; i<vse.size(); i++)//возвращает количество элементов в векторе, перебираем все города вектора
			{
				if ((vse[i].gorod[0] == symvol_pos) && vse[j].gorod[0] != 0)//сравниваем первую и последнею букву разных городов
				{
					cout << vse[i].gorod << endl;//если совпало, то выводим
					strcpy_s(s, vse[i].gorod);//копируем этот город в s
					vse[i].gorod[0] = 0;//чтоб потом исключить
					break;//выходим из цикла 
				}
			}
		}
	}
	system("pause");
	return 0;
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 06.07.2018 в 15:44.
oqi вне форума Ответить с цитированием
Старый 06.07.2018, 15:53   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

по-моему, ошибка не в коде, а в алгоритме.
тут нужен другой алгоритм.
ну, например, я бы попробовал что-то замутить типа Поиск с возвратом, бэктрекинг (англ. backtracking), он же РЕКУРСИВНЫЙ ПЕРЕБОР С ВОЗВРАТОМ (БЭК-ТРЕКИНГ)
см.
https://acmp.ru/article.asp?id_text=188
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2018, 17:22   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от oqi Посмотреть сообщение
Код:
vse[i].gorod[0] = 0;//чтоб потом исключить
- Ну я не знаю, исключили все города при 1 проходе, а как же остальные проходы?
Мне кажется, что тут нужно еще сделать неизменную копию массива vse, чтобы при остальных проходах массив vse восстанавливался из оригинала.

Последний раз редактировалось Cuprum5; 07.07.2018 в 18:03.
Cuprum5 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
игра домино.код уже есть! помогите найти ошибку! kitty_girl Помощь студентам 3 24.09.2014 12:02
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10
Игра в города на С++ Watanuki Помощь студентам 1 22.05.2012 19:24
pascal игра в города ByaKaFu Помощь студентам 4 01.02.2010 21:38
Игра в слова-города на С++ Styks Фриланс 7 26.11.2009 21:46