Программу на с++ Есть список игрушек, которые имеются в n детских садах. Определить игрушки из списка: которых нет ни в одном из детсадов; которые есть в каждом из детсадов.
#include <iostream> #include <vector> #include <string> using namespace std;
int main() { /* Детский сад: id - номер детского сада; toylist - список игрушек в детском саду */ struct house { unsigned id; vector<unsigned> toylist; };
/* Игрушка: id - уникальный номер игрушки; name - название игрушки */ struct toy { unsigned id; string name; };
// Объявляем необходимые переменные vector<house> houses; vector<toy> toys; toy c_toy; house c_house; vector<unsigned> t_list;
// Выводим на экран список всех игрушек for(unsigned i=0; i<toys.size(); ++i) { cout <<"Игрушка " <<toys[i].id <<" - " <<toys[i].name <<endl; }
// Заполняем данные по детским садам unsigned house_id=1; unsigned toy_num; do { cout <<house_id <<"-й детский сад. Введите номера игрушек: " <<endl; // Заполняем детский сад игрушками do { cin >>toy_num; t_list.push_back(toy_num); cout <<"Добавить еще? (y/n): "; cin >>ch; cin.ignore(); } while((ch=='y') || (ch=='Y'));
// Ищем игрушки, которые есть во всех детских садах unsigned t; bool founded = false; vector<unsigned> t1, t2; for(unsigned i=0; i<toys.size(); i++) { t=toys[i].id; for(unsigned j=0; j<houses.size(); j++) { for(unsigned k=0; k<houses[j].toylist.size(); k++) { if(t==houses[j].toylist[k]) founded = true; } if(founded) t1.push_back(t); founded = false; } unsigned h=houses.size(); if(t1.size()==h) t2.push_back(t); t1.clear(); } cout <<"Игрушки, которые есть во всех детских садах:" <<endl; for(unsigned i=0; i<t2.size(); ++i) for(unsigned j=0; j<toys.size(); ++j) if(t2[i]==toys[j].id) cout <<t2[i] <<" (" <<toys[j].name <<"), "; cout <<endl;
// Ищем игрушки, которых нет ни в одном детском саду t1.clear(); t2.clear(); founded=false; for(unsigned i=0; i<toys.size(); i++) { t=toys[i].id; for(unsigned j=0; j<houses.size(); j++) { for(unsigned k=0; k<houses[j].toylist.size(); k++) { if(t==houses[j].toylist[k]) founded = true; } if(!founded) t1.push_back(t); founded = false; } unsigned h=houses.size(); if(t1.size()==h) t2.push_back(t); t1.clear(); } cout <<"Игрушки, которых нет ни в одном детском саду:" <<endl; for(unsigned i=0; i<t2.size(); ++i) for(unsigned j=0; j<toys.size(); ++j) if(t2[i]==toys[j].id) cout <<t2[i] <<" (" <<toys[j].name <<"), "; cout <<endl;
return 0; }
Тестовый прогон: 1-я игрушка: Барабан Добавить ещё одну игрушку? (y/n): y 2-я игрушка: Кукла Барби Добавить ещё одну игрушку? (y/n): y 3-я игрушка: Вертолет Добавить ещё одну игрушку? (y/n): y 4-я игрушка: Конструктор Добавить ещё одну игрушку? (y/n): y 5-я игрушка: Железная дорога Добавить ещё одну игрушку? (y/n): y 6-я игрушка: Флейта Добавить ещё одну игрушку? (y/n): y 7-я игрушка: Слон Добавить ещё одну игрушку? (y/n): y 8-я игрушка: Самосвал Добавить ещё одну игрушку? (y/n): y 9-я игрушка: Кран Добавить ещё одну игрушку? (y/n): y 10-я игрушка: Пожарная машина Добавить ещё одну игрушку? (y/n): n Игрушка 1 - Барабан Игрушка 2 - Кукла Барби Игрушка 3 - Вертолет Игрушка 4 - Конструктор Игрушка 5 - Железная дорога Игрушка 6 - Флейта Игрушка 7 - Слон Игрушка 8 - Самосвал Игрушка 9 - Кран Игрушка 10 - Пожарная машина 1-й детский сад. Введите номера игрушек: 1 Добавить еще? (y/n): y 2 Добавить еще? (y/n): y 3 Добавить еще? (y/n): y 4 Добавить еще? (y/n): y 5 Добавить еще? (y/n): n Добавить ещё детский сад? (y/n): y 2-й детский сад. Введите номера игрушек: 2 Добавить еще? (y/n): y 3 Добавить еще? (y/n): y 4 Добавить еще? (y/n): n Добавить ещё детский сад? (y/n): y 3-й детский сад. Введите номера игрушек: 1 Добавить еще? (y/n): y 2 Добавить еще? (y/n): y 4 Добавить еще? (y/n): y 5 Добавить еще? (y/n): n Добавить ещё детский сад? (y/n): y 4-й детский сад. Введите номера игрушек: 2 Добавить еще? (y/n): y 3 Добавить еще? (y/n): y 4 Добавить еще? (y/n): y 5 Добавить еще? (y/n): y 1 Добавить еще? (y/n): y 6 Добавить еще? (y/n): n Добавить ещё детский сад? (y/n): n Детсад √1 - игрушки: 1 2 3 4 5 Детсад √2 - игрушки: 2 3 4 Детсад √3 - игрушки: 1 2 4 5 Детсад √4 - игрушки: 2 3 4 5 1 6 Игрушки, которые есть во всех детских садах: 2 (Кукла Барби), 4 (Конструктор), Игрушки, которых нет ни в одном детском саду: 7 (Слон), 8 (Самосвал), 9 (Кран), 10 (Пожарная машина), Для закрытия данного окна нажмите <ВВОД>...
averutin
это зависит от среды разработки. например, в CBuilder не работает setlocale, там надо подключать заголовочник #include и в функции main() писать SetConsoleCP(1251); SetConsoleOutputCP(1251); это чтобы вывод был на русском языке. и в настройках консоли установить шрифт Lucida (иначе так и останутся кракозябры). и вообще - "война кодировок" очень сложная в виндовс, поэтому я пользуюсь линуксом. :-D если ОС сама не может нормально работать с самой же собой, то грош цена такой ОС.
averutin
#include <windows.h> не написалось почему-то
Answers & Comments
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
/*
Детский сад:
id - номер детского сада;
toylist - список игрушек в детском саду
*/
struct house
{
unsigned id;
vector<unsigned> toylist;
};
/*
Игрушка:
id - уникальный номер игрушки;
name - название игрушки
*/
struct toy
{
unsigned id;
string name;
};
// Объявляем необходимые переменные
vector<house> houses;
vector<toy> toys;
toy c_toy;
house c_house;
vector<unsigned> t_list;
// Заполняем массив игрушек
char ch='y';
unsigned toy_id=1;
string toy_name;
do
{
cout <<toy_id <<"-я игрушка: ";
getline(cin, toy_name);
c_toy.id=toy_id;
c_toy.name=toy_name;
toys.push_back(c_toy);
cout <<"Добавить ещё одну игрушку? (y/n): ";
cin >>ch;
cin.ignore();
if((ch=='y') || (ch=='Y'))
toy_id++;
} while((ch=='y') || (ch=='Y'));
// Выводим на экран список всех игрушек
for(unsigned i=0; i<toys.size(); ++i)
{
cout <<"Игрушка " <<toys[i].id <<" - " <<toys[i].name <<endl;
}
// Заполняем данные по детским садам
unsigned house_id=1;
unsigned toy_num;
do
{
cout <<house_id <<"-й детский сад. Введите номера игрушек: " <<endl;
// Заполняем детский сад игрушками
do
{
cin >>toy_num;
t_list.push_back(toy_num);
cout <<"Добавить еще? (y/n): ";
cin >>ch;
cin.ignore();
} while((ch=='y') || (ch=='Y'));
c_house.id=house_id;
c_house.toylist = t_list;
t_list.clear();
houses.push_back(c_house);
cout <<"Добавить ещё детский сад? (y/n): ";
cin >>ch;
if((ch=='y') || (ch=='Y')) house_id++;
} while((ch=='y') || (ch=='Y'));
// Выводим данные по всем детским садам
for(unsigned i=0; i<houses.size(); ++i)
{
cout <<" Детсад √" <<houses[i].id <<" - игрушки: ";
for(unsigned j=0; j<houses[i].toylist.size(); ++j)
cout <<houses[i].toylist[j] <<" ";
cout <<endl;
}
// Ищем игрушки, которые есть во всех детских садах
unsigned t;
bool founded = false;
vector<unsigned> t1, t2;
for(unsigned i=0; i<toys.size(); i++)
{
t=toys[i].id;
for(unsigned j=0; j<houses.size(); j++)
{
for(unsigned k=0; k<houses[j].toylist.size(); k++)
{
if(t==houses[j].toylist[k])
founded = true;
}
if(founded) t1.push_back(t);
founded = false;
}
unsigned h=houses.size();
if(t1.size()==h)
t2.push_back(t);
t1.clear();
}
cout <<"Игрушки, которые есть во всех детских садах:" <<endl;
for(unsigned i=0; i<t2.size(); ++i)
for(unsigned j=0; j<toys.size(); ++j)
if(t2[i]==toys[j].id)
cout <<t2[i] <<" (" <<toys[j].name <<"), ";
cout <<endl;
// Ищем игрушки, которых нет ни в одном детском саду
t1.clear();
t2.clear();
founded=false;
for(unsigned i=0; i<toys.size(); i++)
{
t=toys[i].id;
for(unsigned j=0; j<houses.size(); j++)
{
for(unsigned k=0; k<houses[j].toylist.size(); k++)
{
if(t==houses[j].toylist[k])
founded = true;
}
if(!founded) t1.push_back(t);
founded = false;
}
unsigned h=houses.size();
if(t1.size()==h)
t2.push_back(t);
t1.clear();
}
cout <<"Игрушки, которых нет ни в одном детском саду:" <<endl;
for(unsigned i=0; i<t2.size(); ++i)
for(unsigned j=0; j<toys.size(); ++j)
if(t2[i]==toys[j].id)
cout <<t2[i] <<" (" <<toys[j].name <<"), ";
cout <<endl;
return 0;
}
Тестовый прогон:
1-я игрушка: Барабан
Добавить ещё одну игрушку? (y/n): y
2-я игрушка: Кукла Барби
Добавить ещё одну игрушку? (y/n): y
3-я игрушка: Вертолет
Добавить ещё одну игрушку? (y/n): y
4-я игрушка: Конструктор
Добавить ещё одну игрушку? (y/n): y
5-я игрушка: Железная дорога
Добавить ещё одну игрушку? (y/n): y
6-я игрушка: Флейта
Добавить ещё одну игрушку? (y/n): y
7-я игрушка: Слон
Добавить ещё одну игрушку? (y/n): y
8-я игрушка: Самосвал
Добавить ещё одну игрушку? (y/n): y
9-я игрушка: Кран
Добавить ещё одну игрушку? (y/n): y
10-я игрушка: Пожарная машина
Добавить ещё одну игрушку? (y/n): n
Игрушка 1 - Барабан
Игрушка 2 - Кукла Барби
Игрушка 3 - Вертолет
Игрушка 4 - Конструктор
Игрушка 5 - Железная дорога
Игрушка 6 - Флейта
Игрушка 7 - Слон
Игрушка 8 - Самосвал
Игрушка 9 - Кран
Игрушка 10 - Пожарная машина
1-й детский сад. Введите номера игрушек:
1
Добавить еще? (y/n): y
2
Добавить еще? (y/n): y
3
Добавить еще? (y/n): y
4
Добавить еще? (y/n): y
5
Добавить еще? (y/n): n
Добавить ещё детский сад? (y/n): y
2-й детский сад. Введите номера игрушек:
2
Добавить еще? (y/n): y
3
Добавить еще? (y/n): y
4
Добавить еще? (y/n): n
Добавить ещё детский сад? (y/n): y
3-й детский сад. Введите номера игрушек:
1
Добавить еще? (y/n): y
2
Добавить еще? (y/n): y
4
Добавить еще? (y/n): y
5
Добавить еще? (y/n): n
Добавить ещё детский сад? (y/n): y
4-й детский сад. Введите номера игрушек:
2
Добавить еще? (y/n): y
3
Добавить еще? (y/n): y
4
Добавить еще? (y/n): y
5
Добавить еще? (y/n): y
1
Добавить еще? (y/n): y
6
Добавить еще? (y/n): n
Добавить ещё детский сад? (y/n): n
Детсад √1 - игрушки: 1 2 3 4 5
Детсад √2 - игрушки: 2 3 4
Детсад √3 - игрушки: 1 2 4 5
Детсад √4 - игрушки: 2 3 4 5 1 6
Игрушки, которые есть во всех детских садах:
2 (Кукла Барби), 4 (Конструктор),
Игрушки, которых нет ни в одном детском саду:
7 (Слон), 8 (Самосвал), 9 (Кран), 10 (Пожарная машина),
Для закрытия данного окна нажмите <ВВОД>...