Перейти к содержимому

Фото
- - - - -

Min в строке и max в столбце(матрицы)


  • Вы не можете создать новую тему
  • Please log in to reply
39 ответов в этой теме

#31 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 28 Декабрь 2006 - 11:34

Давай сюда все четыре :) решим :))
  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!

#32 desert_rose

desert_rose
  • Пользователь
  • 25 сообщений
  • Откуда:Украина,Крым,Симферополь

Отправлено 28 Декабрь 2006 - 19:55

спасибо))
меня только что обрадовали, у нас договоренность с очень шарющим в программировании одногруппником была-- я ему решаю модуль по истории на 5, он мне оставшиеся задачки по программировании. по истории у него 5, задачки он уже передал, правда надо посмотреть, может че и не получитсся, если что я напишу!:)
  • 0
Why to walk when you can run? // Iacoca Lee

#33 desert_rose

desert_rose
  • Пользователь
  • 25 сообщений
  • Откуда:Украина,Крым,Симферополь

Отправлено 29 Декабрь 2006 - 20:25

а вот и первые вопросы.. :)
вот решение задачки, но что-то я не очень могу понять что к чему.не подскажите?а? :)

Найдите самое длинное общее слово двух заданных предложений .

#include <iostream.h>
#include <string.h>
#include <conio.h>

void fillbuf(char *buf, char *strt_ptr, char *end_ptr);
void putbuf(char *strt_ptr, char *end_ptr);

const int
STRSIZE = 80,
STRNUM = 2;

int main()
{
char
string[STRNUM][STRSIZE],
*ptr,
*strt_ptr,
*end_ptr,
*strt_big,
*end_big,
*sep = " -.,;:!?",
*buf = new char [STRSIZE];

int
len = 0;

cin.getline(string[0], STRSIZE);
cin.getline(string[1], STRSIZE);

strt_ptr = strtok(string[0], sep);
while (strt_ptr)
{
end_ptr = strtok(NULL, sep);
fillbuf(buf, strt_ptr, end_ptr);
if (strstr(string[1], buf))
if (end_ptr - strt_ptr >= len)
{
strt_big = strt_ptr;
end_big = end_ptr;
len = (end_ptr - strt_ptr);
}
strt_ptr = end_ptr;
}
putbuf(strt_big, end_big);

cout << "Press ENTER to continue...";
getch();
return 0;
}



void fillbuf(char *buf, char *strt_ptr, char *end_ptr)
{
while (strt_ptr < end_ptr)
*(buf++) = *(strt_ptr++);
return;
}



void putbuf(char *strt_ptr, char *end_ptr)
{
while (strt_ptr < end_ptr)
putchar(*(strt_ptr++));
return;
}

Сообщение изменено: desert_rose (29 Декабрь 2006 - 20:25 )

  • 0
Why to walk when you can run? // Iacoca Lee

#34 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 30 Декабрь 2006 - 15:10

совершенно кривой код, так писать не надо, лучше уж вобще не писать =)
вот тесты, которые у меня не прошли:
1)
aa
aa
ответ: (пусто)

2)
aa aaaa
aa aaaa
ответ: aa

3)
abc !defg!
.defg!
ответ: (пусто)

основные ошибки:
некорректное использование strtok() (не проиходит копирования, если только одно слово, т.к, end_ptr == NULL)
совершенно ненужная арифметика указателей, легко допустить ошибку, и вобще некрасиво как то =)
автор забыл сделать detele[] buf;

намного легче использовать std::string и другие функции STL библиотеки

#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>

using namespace std;

char modd(char x)
{
	string delim = ",.!-_?:;";
	if (delim.find(x) != string::npos)
	  return ' ';
	return x;
}

int main()
{
	string a, b;
	getline(cin, a);
	getline(cin, b);
	
	transform(a.begin(), a.end(), a.begin(), modd);
	
	string t;
	string mx = "";
	istringstream ss(a);
	
	while (ss >> t)
	{
		if (b.find(t) != string::npos)
		  if (mx.size() < t.size())
			mx = t;
	}
	
	if (!mx.size()) cout << "no match" << endl;
	else cout << mx << endl;
	
	//while(cin.get() == '\n');
	return 0;
}


  • 0
int main(void)

#35 desert_rose

desert_rose
  • Пользователь
  • 25 сообщений
  • Откуда:Украина,Крым,Симферополь

Отправлено 01 Январь 2007 - 14:38

спасибо))
сейчас буду пробовать эти варианты))

Всех с НОВЫМ ГОДОМ!!
  • 0
Why to walk when you can run? // Iacoca Lee

#36 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 01 Январь 2007 - 14:51

desert_rose,
Отдохни чуть-чуть, отоспись :) Праздник еще идет, а она уже пробовать :)
  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!

#37 desert_rose

desert_rose
  • Пользователь
  • 25 сообщений
  • Откуда:Украина,Крым,Симферополь

Отправлено 01 Январь 2007 - 19:07

:)
  • 0
Why to walk when you can run? // Iacoca Lee

#38 desert_rose

desert_rose
  • Пользователь
  • 25 сообщений
  • Откуда:Украина,Крым,Симферополь

Отправлено 02 Январь 2007 - 16:33

все проходит отлично!спасибо за помощь))
но вот неочень понимаю вот эти строчки. . . . . . .

transform(a.begin(), a.end(), a.begin(), modd);

string t;
string mx = "";
istringstream ss(a);

while (ss >> t)
{
if (b.find(t) != string::npos)
if (mx.size() < t.size())
mx = t;
  • 0
Why to walk when you can run? // Iacoca Lee

#39 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 02 Январь 2007 - 17:04

transform(a.begin(), a.end(), a.begin(), modd);

string t;
string mx = "";
istringstream ss(a);

while (ss >> t)
{
if (b.find(t) != string::npos)
if (mx.size() < t.size())
mx = t;
}

постараюсь доступно обьяснить
transform()- функция стандартной библиотеки C++. в данном случае transform() использует функцию modd() для того, чтобы заменить все знаки препинания на пробелы. Зачем? Для того что в цикле while (ss >> t) переменная t была следующим словом. слова разделены одним или более пробелами. цикл заканчивается тогда, когда нет больше слов. оператор >> можно использовать для чтения из любогo потока, в данном случае это строка (istringstream). в цикле идет поиск полученного слова во второй строке. если такого там нет, find() возвращает string::npos. дальше идет проверка на длину найденного слова, если новое слово длиннее, mx изменяется.
  • 0
int main(void)

#40 desert_rose

desert_rose
  • Пользователь
  • 25 сообщений
  • Откуда:Украина,Крым,Симферополь

Отправлено 04 Январь 2007 - 22:03

ок, спасибо еще раз! :)
  • 0
Why to walk when you can run? // Iacoca Lee