#include <iostream>
#include <ctime>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <utility>
using namespace std;
typedef vector< vector<int> > T;
ostream &operator<<(ostream &output,const T &mass)
{
for(unsigned int i = 0;i<mass.size();++i){
for(unsigned int j = 0;j<mass.size();++j)
output<<setw(5)<<mass[j];
output<<"\n\n";
}
return output;
}
int _tmain(int argc, _TCHAR* argv[])
{
wcout.imbue(locale(".866"));
srand(time(0));
unsigned int n;
do{
wcout<<L"Введите SIZE матрицы. SIZE > 0"<<endl;
cin>>n;
}while(n <= 0);
//матрица
T mass(n, vector<int>(n));
for(unsigned int i = 0;i<n;++i){
for(unsigned int j = 0;j<n;++j){
mass[j] = rand() % 100 - 50;
}
}
cout<<mass;
//запишем побочную диагoналь в доп.массив
vector<int> coll;
wcout<<L"побочная диагональ и соседи слева и справа:\n";
for(unsigned int i = 0;i < n;++i){
for(unsigned j = 0;j < n;++j)
if(i - 1 == j||i == j||i - 2 == j)
coll.push_back(mass[j]);
}
vector<int>::iterator res = min_element(coll.begin(),coll.end());
copy(coll.begin(),coll.end(),
ostream_iterator<int>(cout," "));
wcout<<L"\nее минимальный элемент : "<<*res;
set<int> coll2;
for(unsigned int i = 0;i < n;++i){
for(unsigned j = 0;j < n;++j)
coll2.insert(mass[j]);
}
vector<int> coll3(coll2.begin(),coll2.end());
typedef pair<int,int> pr;
map< int,pr > m_map;
for(int i = 0;i <coll3.size();++i){
for(int j = i + 1;j < coll3.size();++j){
pr a = make_pair(coll3[j],coll3);
m_map.insert(map<int,pr>::value_type(int(abs(coll3[j] - coll3)),pr(a)));
}
}
cout<<endl;
map<int,pr>::iterator it = m_map.begin();
wcout<<L"минимальная разность неравных элементов матрицы : "<<endl;
cout<<" ("<<(it->second).first<<") - ("<<(it->second).second<<") = "<<it->first<<endl;
return 0;
}
(С++) Операции с массивами
1. Дана квадратная матрица. Найти минимальное из значений элементов побочной диагонали матрицы и соседних с ними справа и слева.
2. Найти пару неравных элементов матрицы, модуль разности которых минимален.
Если я правильно понял условие,тогда на С++ - так.Или надо С-style ?
Цитата: m_Valery
copy(coll.begin(),coll.end(), ostream_iterator<int>(cout," "));
На этой строчке компилятор ругается: "Undefined symbol 'ostream_iterator'" (среда Borland C++ 6).
Цитата: ost-andrew
На этой строчке компилятор ругается: "Undefined symbol 'ostream_iterator'" (среда Borland C++ 6).
Это просто вывод массива на экран.Я делал в Visual Studio 2005. Наверное в Borland надо #include <iterator>...А вообще сделаем проще,выведем массив так:
Код:
...
for(unsigned int i = 0;i < coll.size();++i)
cout<<coll<<' ';
...
for(unsigned int i = 0;i < coll.size();++i)
cout<<coll<<' ';
...
Так должно работать.
Спасибо! Всё работает.