Regista6 Ответов: 2

Программа для определения того, возвращает ли сложение двух чисел в целочисленном массиве значение 'k', введенное пользователем .


>пользователь введет массив , его размер и значение k .
затем функция проверит, существуют ли два числа, сумма которых равна k .
>Если да , то будет возвращено true , если нет , то будет возвращено false .

>Вот ссылка на код: beep1.cpp · GitHub[^]

Что я уже пробовал:

>Теперь я был в состоянии написать функцию, однако я не был в состоянии включить ложную часть .
>мой код возвращает TRUE только в том случае, если такие пары существуют в целочисленном массиве .
>Я попробовал использовать bool, а затем использовать 'return true' и return 'false', но это не сработало

>Я попытался использовать функцию #define, чтобы установить TRUE как 1 и FALSE как 0, но это также не сработало должным образом.

Patrice T

А у вас есть вопрос ?
Вставьте свой код в вопрос
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

CHill60

Я не могу перейти по вашей ссылке на ваш код. Разместите соответствующий код здесь

2 Ответов

Рейтинг:
8

Rick York

Вам не нужно определять значения для TRUE и FALSE. Вы отметили этот вопрос как относящийся к C++, и в этом языке определены ключевые слова true и false, и это все, что вам нужно.

Вот некоторый псевдокод, который должен дать вам представление.

while( looping )
{
   if( array[m] + array[n] == valueK )
       return true;
}
return false;
Петлевая часть должна выглядеть как петли для пузырьковой сортировки и проверять каждую возможную пару значений, а не одну и ту же дважды. Вот "тупой, грубой силы" способ сделать это. Я оставлю вам возможность найти более оптимальный способ.
// dumb loops - not recommended but the program can work with them.
int last = size - 1;
for( int m = 0; m < last; ++m )
   for( int n = 0; n < last; ++n )
   {
      if( n == m )
          continue;    // same index - skip this one
      // evaluate sum of values here
   }
Если вы обнаружите, что не можете придумать лучшего способа написания циклов, то поищите какой-нибудь код для реализации пузырьковой сортировки. Это должно показать вам пример лучших петель.


Regista6

Я действительно пытался использовать return true и return false . В то время это не сработало . Теперь я попробовал еще раз, и это сработало. О петле , да, моя петля действительно тупая . Мне придется его оптимизировать . Спасибо за вашу помощь .

Regista6

Я переписал функцию и включил часть пузырьковой сортировки во второй цикл . Пожалуйста, взгляните .

int two_sums(int str[],int k,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-1-i;j++)
{
если(str[i]+str[n-1-j]==k)

вернуть true;
}

}
возвращать false;
}

Rick York

Вы близки - вот как должна выглядеть петля сортировки пузырьков :

int last = n - 1;
    for( int i = 0; i < last - 1; ++i )
        for( int j = i + 1; j < last; ++j )
        {
        }
Ключ заключается в том, что начальные и конечные значения цикла расположены в шахматном порядке, так что я никогда не буду таким же, как j.

KarstenK

если(стр[я]+стр[Дж]==K) будет понятнее. Как-нибудь справьтесь с этим делом (i == j).

Совет: сделайте вывод, когда true для отладки.

Рейтинг:
16

OriginalGriff

Это ваша домашняя работа, поэтому мы не собираемся делать ее за вас - и в этом не должно быть необходимости, если вы правильно написали функцию.

Как бы я это сделал:
Объявить два #определяет:

#define TRUE (1==1)
#define FALSE (1==0)
В функции объявите целое число:
int isFound = FALSE;
Затем используйте петлю, чтобы посмотреть, найдете ли вы эти два числа. Если вы это сделаете, установите isFound к TRUE и использовать break чтобы выйти из петли.
В конце функции, возвращаемое значение isFound


Regista6

Это не мое домашнее задание . Я не хочу, чтобы ты делал это для меня . Я действительно пытался использовать #define,но не использовал никакой переменной для хранения FALSE, как isFound. Спасибо.