Мой код скомпилирован (g ++) без ошибок и без ошибок запущен в моей системе (Macos) для выборочного ввода с веб-сайта, но показывает ошибку времени выполнения в онлайн-оценке. Пожалуйста, помогите, я новый программист. Это - формулировка проблемы.
Моя программа возвращает правильные результаты для входных данных теста.
Они не указали точную причину ошибки времени выполнения. Веб-сайт содержит следующую информацию об ошибке времени выполнения:
Ошибка времени выполнения (RE): во время выполнения произошла ошибка вашей программы (ошибка сегментации, исключение с плавающей запятой ...). Точная причина не сообщается пользователю, чтобы избежать взлома. Убедитесь, что ваша программа возвращает в оболочку код 0.
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
using namespace std;
int main(){
string line;
while(getline( cin,line) && line != "" ){
istringstream split(line);
string kt,jt;
getline(split, kt, ' ');
getline(split, jt);
int k = stoi(kt);
int j = stoi(jt);
vector<int> all_cycles;
for(int i = k; i<= j; i++){
vector<int> cycle ;
int temp = i;
while(temp != 1){
cycle.push_back(temp);
if(temp %2 == 0) temp = temp /2;
else temp = (temp*3) + 1;
}
all_cycles.push_back(cycle.size() + 1 );
cycle.clear();
}
cout << k << " " << j << " " << *max_element(all_cycles.begin(), all_cycles.end()) << "\n";
all_cycles.clear();
}
return 0;
}
Обновление кода 1:
Заменены векторы на счетчики.
Исправлено неопределенное поведение, если j
Отправлен обновленный код, но ошибка выполнения проблема обнаружения путем копирования следующего символа ввода из потокового буфера в переменную и проверки, является ли это символом новой строки.
Этот обновленный код, похоже, избавился от ошибки времени выполнения, и теперь это ошибка вывода. Что я должен быть в состоянии решить путем форматирования моего вывода. Таким образом, кажется, что стои в моем предыдущем коде могли вызывать исключение во время выполнения. Спасибо @walnut за указание на это.
#include <iostream>
using namespace std;
int main(){
int k, j;
int eofile = 0;
while(cin >> k >> j && !eofile ){
streambuf * pbuf = cin.rdbuf();
char ch = pbuf->snextc();
if(ch == '\n') eofile = 1;
if(k > j) {
int t = k;
k = j;
j = t;
}
int max_cycle = 0;
for(int i = k; i<= j; i++){
int cycle = 1 ;
int temp = i;
while(temp != 1){
cycle++;
if(temp %2 == 0) temp = temp /2;
else temp = (temp*3) + 1;
}
if(cycle > max_cycle) max_cycle = cycle;
}
cout << k << " " << j << " " << max_cycle << "\n";
}
return 0;
}
Если есть лучший способ получить отформатированный ввод, а также обнаружить новую строку подскажите пожалуйста как это сделать.