Для моего класса мы используем два компилятора, xcode и codeboard, где codeboard является более строгим из двух и имеет список предустановленных утверждений для тестирования вашего кода. В моем коде для функции a у меня есть вложенные циклы, где я хочу, чтобы я всегда был на шаг впереди k. Он отлично работает в xcode, но дает мне ошибку сегментации на кодовой доске.
for (int k = 0; k <= n-2; k++) {
for (int i = k+1; i <= n-1; i++) {
if (array[k] == array[i])
Что странно, если я использую k ++ или ++ k вместо k + 1, это не приведет к ошибке сегментации , но мой код не пройдет все утверждения. Я думал, что они должны были быть одним и тем же?
Что еще более странно, если я использую k + 1 в функции b, это не приведет к ошибке в кодовой доске.
for (int k = 0; k <= n-1; k++) {
for (int i = k+1; i <= n-1; i++) {
if (array[k] > array[i])
По сути, что здесь происходит?
Редактировать: Итак, я получаю от всех то, что когда я использую i = k + 1 во внутренней l oop , это увеличивает значение k во внешнем l oop. Мол, если k = 1, i = 2, то когда он возвращается к внешнему l oop, k = 3. Если это так, то как бы я смог опередить k?
Редактировать: Пожалуйста, игнорируйте k ++ и k + 1 часть моего вопроса, это не было моей главной проблемой, просто побочная вещь, которая немного смутил меня, но я чувствую разницу сейчас. Я бы удалил эту часть из своего поста, но я уверен, что это запрещено. Мой главный вопрос - как сохранить значение i на 1 больше, чем значение k?
В следующем коде цель состоит в том, чтобы, если любое из значений массива было одинаковым, в какой-то момент оно должно иметь значение true. Что касается воспроизводимых результатов:
string a[3] = {"aaa", "bbbb", "cccc"};
int n = 3;
for (int k = 0; k <= n-2; k++) {
int b = 0;
for (int i = k+1; i <= n-1; i++) {
if (a[k] == a[i])
b++;
}
if (b != 0) {
cout << "true" << endl;
break;
}
else
cout << "false" << endl;
}