Кто может устно объяснить уже решенные задачи на С++.
Нужен человек который хоть немного разбирается в С++.
Нужно написать, что делает каждый абзац в данной программе.
(1)Условие:
Назовем два массива похожими, если они состоят из одних и тех же элементов
(без учета кратности). По двум данным массивам выясните, похожие они или нет.
Решение:
#include
#include
#include
using namespace std;
int main()
{
int n, k, s;
cin >> n;
map f;
map sn;
map::iterator it;
for(int i = 0; i < n; i++){
cin >> s;
if(f.count(s) >= 1) f[s]++;
else f.insert(pair (s, i));
}
cin >> k;
for(int i = 0; i < k; i++)
{
cin >> s;
if(sn.count(s) >= 1) sn[s]++;
else sn.insert(pair (s, i));
}
if(f.size() != sn.size()){
cout << "NO";
return 0;
}
for(it = f.begin(); it != f.end(); it++)
if(sn.find(it->first) == sn.end()){
cout << "NO";
return 0;
}
cout << "YES";
return 0;
}
(2)Условие:
Давид и Вероника собирали камни, они набрали много камней и сложили их
в две большие кучи. Теперь они хотят определить, сколько они собрали камней, таких, что такой же размер камней есть и у Вероники, и у Давида и сложить из них третью кучу. Размеры камней могут повторяться, все камни одинакового размера из обоих куч надо складывать в третью кучу им сложить третью кучу.
Решение:
#include
#include
using namespace std;
int main()
{
int n, k, s;
cin >> n >> k;
map As;
map Aj;
map::iterator itas, itaj;
for(int i = 0; i < n; i++){
cin >> s;
if(As.count(s) >= 1) As[s]++;
else As.insert(pair (s, 1));
}
for(int i = 0; i < k; i++){
cin >> s;
if(Aj.count(s) >= 1) Aj[s]++;
else Aj.insert(pair (s, 1));
}
itaj = Aj.begin();
for(itas = As.begin(); itas != As.end(); itas++)
if(Aj.find(itas->first) != Aj.end()){
itaj = Aj.find(itas->first);
for(int i = 0; i < itas->second + itaj->second; i++)
cout << itas->first << endl;
}
return 0;
}