Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском.
Закрыт 9 месяцев назад.
#include <fstream>
#include <string>
using namespace std;
int main()
{
string s; // принятое сообщение
string n; // количество следующих сообщений
string m; // следующие сообщения
int min; // мин. кол-во отличных позиций
int k; // кол-во сообщений, которые отличаются от s мин. кол-вом позиций
string index; // их номера
ifstream fin;
fin.open("INPUT.TXT");
getline(fin, s); // считываем принятое сообщение
getline(fin, n); // считываем n
min = s.length(); // min присваиваем длину строки
for (int i = 1; fin.peek() != EOF; i++)
{
getline(fin, m); // считываем сообщение
int diff = 0; // количество отличий = 0
for (int j = 0; j < s.length(); j++)
{
if (s[j] != m[j]) // если отличаются
diff++; // то увеличиваем счетчик
if (diff > min) break;
}
if (diff < min) // если эта строка отличается на меньшее кол-во позиций
{
min = diff; // min присваиваем это кол-во отличных позиций
k = 1; // k присваиваем 1
index = "";
index = to_string(i); // вносим номер в массив
}
else if (diff == min) // если нашлось такое же кол-во позиций
{
k++; // увеличиваем k
index = index + " " + to_string(i); // вносим номер в массив
}
m = "";
}
fin.close();
ofstream fout;
fout.open("OUTPUT.TXT");
fout << k << endl << index; // выводим результат
fout.close();
return 0;
}
Задача: https://acmp.ru/index.asp?main=task&id_task=65&ins=1#solution
Если вы нажмете ссылку "обсуждение" на странице задачи, то увидите в первом же комментарии, что возможен набор входных данных с n = 0
и таковой якобы даже присутствует среди тестов. Условие задачи действительно не гарантирует положительности n
. Ваша программа, очевидно, будет выводить "мусор" для такого случая, ибо вы не инициализируете значение k
(http://coliru.stacked-crooked.com/a/bcdb82b515a1f084)
Аналогичная проблема вылезет если все сообщения m
будут отличаться от сообщения s
во всех позициях. Так как вы изначально делаете min = s.length()
, ветка if (diff < min)
не выполнится никогда, и переменной k
никогда не будет присвоено осмысленное значение (http://coliru.stacked-crooked.com/a/07ace0077df19ec9)
Другие косяки/странности в вашем коде есть, но в лабораторных условиях они мешать не должны.
Лень копаться в вашей программе на ночь глядя. Держите готовое решение...
#include <vector>
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
size_t diff(const string& a, const string& b, size_t l)
{
size_t d = 0;
for(size_t i = 0; i < l; ++i)
d += (a[i] != b[i]);
return d;
}
int main()
{
string s;
size_t n, l, m;
cin >> s >> n;
l = m = s.length();
vector<int> v;
for(int i = 0; i < n; ++i)
{
string t;
cin >> t;
size_t d = diff(s,t,l);
if (d > m) continue;
if (d < m)
{
m = d;
v.clear();
}
v.push_back(i+1);
}
cout << v.size() << endl;
for(int i: v) cout << i << endl;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Написал калькулятор, в котором для обработки нажатий используется интерфейс OnClickListenerВнешний вид калькулятора прописал в xml файле, а в файле...
Разрабатываю игру в качестве обученияВся игра идет через кнопки
Сделал кастомный адаптер для спиннераПри раскрытии спиннера метод getDropDownView вызывается непрерывно циклически, даже если список не трогать
Делаю приложение для конференций, хочу реализовать в ней новости и программу событийСайта нет, и писать его с нуля не хочется