Вот программка. Необходимо найти сумму двух минимальных элементов массива. Видимо ошибка здесь
for (int *Sarr=b; Sarr < myArr + x - 1; Sarr++) *Sarr = *(Sarr++)
Но вот только разобраться не могу, глуп наверное для этого! Помогите, кто знает, пожалуйста.
int Sum(int myArr[], int x) {
int min, sum=0, *b = nullptr;
for (int i = 0; i < 2; i++) {
min = *myArr;
for (int *Parr = myArr + 1; Parr < myArr + x; Parr++) {
if (*Parr < min) {
min = *Parr;
b = Parr;
}
}
for (int *Sarr=b; Sarr < myArr + x - 1; Sarr++) *Sarr = *(Sarr++);
x--;
sum += min;
}
return sum;
}
int main()
{
int const N = 10;
int Arr[N] = { -10,3,8,5,-19,23,-1,6,12,-8 };
cout << "The sum of 2 minimal elements is: " << Sum(Arr, N) << endl;
return 0;
}
OUTPUT:
The sum of 2 minimal elements is: -38
int Sum(int myArr[], int x) {
int* p1 = myArr, *p2 = p1 + 1, *p = p2;
for (; p != myArr + x; ++p) {
if(*p < *p1) {
p2 = p1;
p1 = p;
}
else if(*p < *p2) // обработаем случай, когда первый элемент окажется
p2 = p; // наименьшим, тогда нужно найти второй наименьший
}
return *p1 + *p2;
}
будут вопросы, спросите, а то поленился написать комментарии(вернее времени мало)
Что-то не могу понять, что вы такое делаете с этим Sarr
...
Словом, вы не хотите переписать функцию вот так:
int Sum(int myArr[], int N)
{
if (N < 2) return 0;
int min0, min1;
min0 = myArr[0];
min1 = myArr[1];
if (min0 > min1)
{
int tmp = min0;
min0 = min1;
min1 = tmp;
}
for (int i = 2; i < N; i++)
{
if (min0 > myArr[i])
{
min1 = min0;
min0 = myArr[i];
}
else if (min1 > myArr[i])
{
min1 = myArr[i];
}
}
return min0 + min1;
}
int main()
{
int const N = 10;
int Arr[N] = { -10,3,8,5,-19,23,-1,6,12,-8 };
std::partial_sort(Arr, &Arr[2], &Arr[N]); // сортируем до arr[2]
cout << "The sum of 2 minimal elements is: " << Arr[0] + Arr[1] <<endl;
return 0;
}`
Это если вам нужно просто найти эту сумму, а не самому писать альгоритм
Ну а Arr, &Arr[2]
и &Arr[N]
явлются указательями, так что требования не нарушены...
У Тебя в sum идёт два меньших числа, вот только после первого прохода Ты никак не проверяешь на одинаковые значения. В итоге у Тебя всегда идёт не сложение, а умножение самого маленького на два. Сделай проверку на предыдущее самое маленькое и будет Тебе счастье.
Ну или, как писали выше - сделай всё за раз. просто найди два меньших за один проход.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В программе вводится переменная float (конечно же должны вводиться числовые значения), но интерфейс программы так построен, что пользователь...