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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 10:23   #1
jambas92
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
Стрелка выбрать наименьшее(с++)

здравствуйте! введите такой тест:
ввод:
3
21 Astana 10:10
31 Semey 21:00
301 Semey 16:00
SEMEY

моя программа должна вывести на экран направление с наименьшим временем, и ДОЛЖНА ВЫВЕСТИ:
301_SEMEY_16:00
но пока она выводит два направления:
31 _SEMEY_21:00
301_SEMEY_16:00
jambas92 вне форума Ответить с цитированием
Старый 16.11.2010, 10:24   #2
jambas92
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

вот мой код

#include <iostream>
#include <cctype>
#include <string>

using namespace std;

struct TrainRecord{
int id;
string dest;
string dep;

};
void sort1(int m1[], int m2[], int m3[], int n)
{
for (int i=0; i<n-1; i++)
{
for (int j=i+1; j<n; j++)
{
if(m1[i]==m1[j] && m3[i]>m3[j])
swap(m2[i], m2[j]);
swap(m3[i], m3[j]);
}
}
}
int main () {

int n;
int count=0;
string finder;
cin>>n;

TrainRecord * records= new TrainRecord[n];
for(int i=0;i<n;i++)
cin>>records[i].id>>records[i].dest>>records[i].dep;
cin>>finder;

for(int i=0; i<finder.length(); i++)
if(islower(finder[i])) finder[i]=toupper(finder[i]);

for(int i=0; i<n; i++){
for(int j=0; j<(records[i].dest).length(); j++)
if(islower(records[i].dest[j])) records[i].dest[j]=toupper(records[i].dest[j]);
}

for(int i=0;i<n;i++)
{
if(finder==records[i].dest)
{
cout<<records[i].id<<"_"<<records[i].dest<<"_"<<records[i].dep<<endl;
}
else
{
count++;
}

if (count==n)
{
cout << "Impossible";
}
}
return 0;
}
jambas92 вне форума Ответить с цитированием
Старый 16.11.2010, 22:08   #3
jambas92
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

сто так сложно что ли????
jambas92 вне форума Ответить с цитированием
Старый 17.11.2010, 00:26   #4
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Да вот в том-то и дело, что не сложно. Вот скажите мне, пожалуйста, а где вы, собственно проверяете направление с наименьшим временем?
Код:
int min = 9999;
int min_idx = -1;
for(int i=0;i<n;i++)
{
if(finder==records[i].dest)
{
if(min > records[i].dep){
min = records[i].dep;
min_idx = i;
}

}
}
if(min_idx > -1){
cout<<records[min_idx].id<<"_"<<records[min_idx].dest<<"_"<<records[min_idx].dep<<endl;
}else{
cout << "Impossible";
}
И все бы было хорошо... Только вот у вас время - это строка, поэтому такой способ не прокатит. Но направление поиска минимального значения я вам дала. А там уже как хотите - то ли делайте время двумя числами, то ли структурой. В принципе, может, наверное, и так прокатить. Только переменной min тип поставьте string и попробуйте.

------------------------------------------------------------------------
В общем, у меня вот так все прекрасно работает:
Код:
#include <iostream>
#include <cctype>
#include <string>

using namespace std;

struct TrainRecord {
	int id;
	string dest;
	string dep;

}; 

int main () {
	int n;
	string finder;
	cin>>n;

	TrainRecord * records= new TrainRecord[n];
	for(int i=0;i<n;i++){
		cin>>records[i].id>>records[i].dest>>records[i].dep;
	}
	cin>>finder;

	/*что вот это, я понять не могу
	
	for(int i=0; i<finder.length(); i++)
		if(islower(finder[i])) finder[i]=toupper(finder[i]);
	
	зачем проверять, не маленькая ли буква? Просто сделали toupper и все!
	
	*/
	for(int i=0; i<finder.length(); i++)
		finder[i]=toupper(finder[i]);

	for(int i=0; i<n; i++){
		for(int j=0; j<(records[i].dest).length(); j++)
			records[i].dest[j]=toupper(records[i].dest[j]);
	}

	string min = "99:99";
	int min_idx = -1;

	for(int i=0;i<n;i++){
		if(finder==records[i].dest)	{
			if(min > records[i].dep){
				min = records[i].dep;
				min_idx = i;
			}
		}
	}

	if(min_idx > -1){
		cout<<records[min_idx].id<<"_"<<records[min_idx].dest<<"_"<<records[min_idx].dep<<endl;
	}else{
		cout << "Impossible";
	}
	getchar();
	getchar();
	return 0;
}
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 17.11.2010 в 00:52.
ACE Valery вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си: 3 числа, выбрать наименьшее негативное Delta_38 Помощь студентам 15 15.04.2010 20:10
Элементарная задача,определить наименьшее число juzam Паскаль, Turbo Pascal, PascalABC.NET 7 26.11.2008 23:53
Найдите наибольшее и наименьшее значение функции xtraSHAD0W Паскаль, Turbo Pascal, PascalABC.NET 3 01.04.2008 17:20
Выбрать из таблицы наименьшее значение John_chek БД в Delphi 2 14.05.2007 17:17
Наибольшее и наименьшее значения функции mcblack Помощь студентам 9 26.04.2007 10:53