Другие языки программирования и технологии

Программа не работает как надо (С++). Задача: Вывести сумму всех элементов массива, кратных данному числу К.

Вот мой код. Суммарное число выводит слишком большее. С массивом mass еще проблемы есть.. Мне надо что бы он расширялся по мере заполнения)

#include <iostream>

using namespace std;

int main()

{

int K;

//int N;

cout << "Vvedite chislo K: ";

cin >> K;

int numb[100];

for (int a = 0; a <= 100; a++)

{

numb[a] = a;

}

//int *mass = new int[N];

int mass[100];

for (int j = 0; j <= 100; j++)

{

if (numb[j] % K == 0)

{

mass[j] = numb[j];

}

}

int sum = 0;

for (int i = 0; i<10; i++)

{

sum = sum + mass[i];

}

cout << "Summa = " << sum;

system("pause");

}
Во-первых, не совсем понятно зачем нужен второй массив?
Во-вторых, что значит кратным? Кто тут делимое, а кто делитель?

Исходя из такой неопределённости решаю, что заданное число - делитель, элементы массива делимое, а массив динамический.

#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
int main() {
srand(static_cast<unsigned>(time(NULL)));
setlocale(LC_CTYPE, "Russian_Russia.1251");
cout << " Введите размер массива: ";
size_t size;
cin >> size;
if (size) {
unsigned long * v = NULL;
if (v = new(nothrow) unsigned long[size]) {
streamsize w = 4;
for (size_t i = 0; i < size; ++i) {
v[i] = 1 + rand() % 100;
cout << setw(w) << v[i];
}
cout << "\n Введите число: ";
unsigned long num;
cin >> num;
if (num) {
unsigned long long sum = 0;
bool flag = false, exist = false;
for (size_t i = 0; i < size; ++i) {
if (v[i] < num) continue;
if (!flag) flag = true;
if (v[i] % num) continue;
if (!exist) exist = true;
sum += v[i];
}
if (flag) {
if (exist) cout << " Сумма = " << sum;
else cout << " Массив не содержит элементов, кратных заданному числу";
}
else cout << " Все элементы массива меньше заданного числа! ";
}
else cout << "\a Попытка деления на ноль! ";
delete[] v;
v = NULL;
}
else cout << "\a При выделении памяти возникла непредвиденная ошибка! ";
}
else cout << "\a Попытка создать массив нулевой длины! ";
cout << endl;
cin.sync();
cin.get();
return 0;
}
Ержигит Каукаров
Ержигит Каукаров
84 422
Лучший ответ
перепиши цикл где происходит проверка на кратность числа К:
int j=0;

for(int i=0; i<100; i++)

{

for(; j<100; j++)

{

if(numb[j]%K==0)

{

mass[i]=numb[j];

break;

}

}

}

вот так должно работать!

Похожие вопросы