Программирование на c++ - Вопросы по С+

Вопрос Программирование на c++

Регистрация
9 Ноя 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
что не так с кодом? исправьте, пожалуйста



#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;



int main() {

int n,m,q;

int t=0;

cout<<"Vvedite sezon N, seriy M, seriy na sayte Q:";

cin>>n>>m>>q;

vector <int> e(q), s(q);

vector <pair <int, int>> v,p;

for (int i = 0; i < q; i++) {

cout<<"Vvedite sezon i seriyu na sayte "<<i+1<<endl;

cin>>e>>s;

v.push_back({e, s});

}

for (int i=1; i<=n; i++) {

for(int j=1; j<=m; j++) {

for (int k = 0; k < q; k++) {

if (i==v[k].first and j==v[k].second) {

t=1;

}

}

if (t==0) {

p.push_back({i,j});

}

t=0;

}

}

cout<<"Otsutstvuyut "<<p.size()<<" seriy!"<<endl;

cout<<"Otsutstvuyut sleduyushie serii: "<<endl;

for (int i=0;i<p.size();i++) {

cout<<i+1<<") "<<p.first<<" - "<<p.second<<endl;

}

return 0;

}
306370786_1a77bba843c96ecdce0bfb396d2d86b2_800.jpg

 
Регистрация
8 Мар 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
Код, который вы предоставили, вполне функционален, но есть небольшие ошибки в выводе серий, и индексация в выводе офсета начинается с 0. Вот исправленный код:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
int n, m, q;
int t = 0;
cout << "Vvedite sezon N, seriy M, seriy na sayte Q:";
cin >> n >> m >> q;
vector<int> e(q), s(q);
vector<pair<int, int>> v, p;

for (int i = 0; i < q; i++) {
cout << "Vvedite sezon i seriyu na sayte " << i + 1 << endl;
cin >> e >> s;
v.push_back({ e, s });
}

for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
for (int k = 0; k < q; k++) {
if (i == v[k].first && j == v[k].second) {
t = 1;
}
}
if (t == 0) {
p.push_back({ i, j });
}
t = 0;
}
}

cout << "Otsutstvuyut " << p.size() << " seriy!" << endl;
cout << "Otsutstvuyut sleduyushie serii: " << endl;
for (int i = 0; i < p.size(); i++) {
cout << i + 1 << ") " << p.first << " - " << p.second << endl;
}
return 0;
}

Изменения включают в себя правильную индексацию в выводе списка серий. Теперь офсет начинается с 1, чтобы соответствовать нумерации серий.
 
Регистрация
20 Сен 2013
Сообщения
71
Репутация
-9
Спасибо
1
Монет
0
#include
#include
using namespace std;

int main()
{
size_t n, m, q, cnt = 0;
cin >> n >> m >> q;
vector all(n * m);
while (q--) {
size_t nn, mm;
cin >> nn >> mm;
cnt += !all[(mm-1) * m + nn - 1];
all[(mm-1) * m + nn - 1] = true;
}
cout
 
Регистрация
20 Дек 2013
Сообщения
68
Репутация
0
Спасибо
0
Монет
0
В коде несколько ошибок:

1. Неопределенные типы переменных n, m, q. Нужно задать их тип, например int.

2. При считывании данных с клавиатуры лучше использовать стрим cin вместо print и считывания по отдельности для каждой переменной.

3. В условии if сравнения переменных лучше использовать == вместо =.

4. Переменная t не нужна, ее функцию выполняет условие if.

5. Лучше использовать более информативные названия переменных, чем single letters.

6. Проверка на ноль элементов вектора p перед выводом.

Вот исправленный вариант:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {

int seasonsCount, seriesPerSeasonCount, seriesOnSiteCount;

cout << "Enter seasons count, series per season count, series on site count: ";
cin >> seasonsCount >> seriesPerSeasonCount >> seriesOnSiteCount;

vector<pair<int,int>> seriesOnSite;
vector<pair<int,int>> missingSeries;

for(int i = 0; i < seriesOnSiteCount; i++) {
int season, series;
cout << "Enter season and series number for site " << i+1 << endl;
cin >> season >> series;
seriesOnSite.push_back(make_pair(season, series));
}

for(int season=1; season<=seasonsCount; season++) {
for(int series=1; series<=seriesPerSeasonCount; series++) {
bool found = false;
for(auto& s : seriesOnSite) {
if(season == s.first && series == s.second) {
found = true;
break;
}
}
if(!found) {
missingSeries.push_back(make_pair(season, series));
}
}
}

if(missingSeries.size() > 0) {
cout << "Missing " << missingSeries.size() << " series!" << endl;
cout << "Missing series: " << endl;
for(int i = 0; i < missingSeries.size(); i++) {
cout << i+1 << ") " << missingSeries.first << " - " << missingSeries.second << endl;
}
}

return 0;
}
 
Сверху Снизу