Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход натуральные числа, количество введённых чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность).
Количество чисел не превышает 1000. Введённые числа не превышают 30000.
Sample Input:
24 16 36 144 64 44 0 24 54 84 24
Sample Output:
168
#include
using namespace std;
int main(int argc, char** argv[]){
int n;
cin >> n;
int count= 0, aggregate = 0;
while (n != 0 && aggregate < 1000){
cin >> n;
if (n % 6 == 0 && n % 10 == 4){
count += n;
aggregate++;
n/=10;
}
}
cout << count;
return 0;
}
Test input:
24 16 36 144 64 44 0 24 54 84 24
Test output:
144
C/C++
Всем салют! Ребят где я затупил в коротком коде на С++. Сделайте ревью. Выводит 144 а нужно 168.
cin >> n; //<-- Это введенное число у Вас и пропадает, т. к. не обрабатывается
int count= 0, aggregate = 0;
while (n != 0 && aggregate < 1000){
cin >> n; //<-- Потому, что здесь уже вводится новое n, а старое значение "потерялось".
Именно поэтому разница с ответом у Вас на 24.
n/=10; <= это Вам не нужно
Перепишите цикл с for-break; а первый ввод уберите. Н-р
for(int n;cin>>n && n;) {
if (n % 6 == 0 && n % 10 == 4) count+=n;
}
https://ideone.com/wZkTZi
ЗЫЖ aggregate - скорее всего тоже не нужен. Не более 1000 это Вам гарантируют, что чисел не будет больше 1000, а не то, что Вам надо это проверять.
Кст по смыслу - aggregate ближе к сумме, чем count ;) Но это уже так...
int count= 0, aggregate = 0;
while (n != 0 && aggregate < 1000){
cin >> n; //<-- Потому, что здесь уже вводится новое n, а старое значение "потерялось".
Именно поэтому разница с ответом у Вас на 24.
n/=10; <= это Вам не нужно
Перепишите цикл с for-break; а первый ввод уберите. Н-р
for(int n;cin>>n && n;) {
if (n % 6 == 0 && n % 10 == 4) count+=n;
}
https://ideone.com/wZkTZi
ЗЫЖ aggregate - скорее всего тоже не нужен. Не более 1000 это Вам гарантируют, что чисел не будет больше 1000, а не то, что Вам надо это проверять.
Кст по смыслу - aggregate ближе к сумме, чем count ;) Но это уже так...
Денис Половка
спасибо, теперь буду знать)
#include <iostream>
using namespace std;
int main() {
int s = 0, n;
while (true) {
cin >> n;
if (!n) break;
if (0 == n % 6 && 4 == n % 10) s += n;
}
cout << s << '\n';
system("pause > nul");
}
using namespace std;
int main() {
int s = 0, n;
while (true) {
cin >> n;
if (!n) break;
if (0 == n % 6 && 4 == n % 10) s += n;
}
cout << s << '\n';
system("pause > nul");
}
помарка - переменные перепутаны местами (код писали не вы)
упущение - ограничение в 30К у вас отсутствует
упущение задания - ограничение только верхнее и не по модулю так что числа -4579531584 вполне могут быть
ошибка - количество [введеных] чисел, а не удовлетворяющих условию
ошибка - вы забираете первое число, затем проверяете его в while и внутри перед проверкой основного условия забираете следующее число
почему никто про реверс-while не вспомнил? впринципе и в обычный можно уложить проверяя cin и n за ним (вроде как в плюcах нету подобия Console.ReadLine() чтобы провернуть что-то типа while((n = Console.ReadLine()) != 0), но зная своё незнание плюсов скорее всего ошибаюсь)
приведу только одну строку, целиковые варианты вам накидали
do { cin >> n; if (n != 0 && n < 30000 && n % 10 == 4 && n % 6 == 0) aggregate += n; } while (n != 0 && ++count < 1000);
упущение - ограничение в 30К у вас отсутствует
упущение задания - ограничение только верхнее и не по модулю так что числа -4579531584 вполне могут быть
ошибка - количество [введеных] чисел, а не удовлетворяющих условию
ошибка - вы забираете первое число, затем проверяете его в while и внутри перед проверкой основного условия забираете следующее число
почему никто про реверс-while не вспомнил? впринципе и в обычный можно уложить проверяя cin и n за ним (вроде как в плюcах нету подобия Console.ReadLine() чтобы провернуть что-то типа while((n = Console.ReadLine()) != 0), но зная своё незнание плюсов скорее всего ошибаюсь)
приведу только одну строку, целиковые варианты вам накидали
do { cin >> n; if (n != 0 && n < 30000 && n % 10 == 4 && n % 6 == 0) aggregate += n; } while (n != 0 && ++count < 1000);
Денис Половка
код писал я) но спасибо за ремарку и объяснение)
Камиль Сабитов
Числа НАТУРАЛЬНЫЕ
Камиль Сабитов
Зачем "реверс-while"? Когда можно сделать красиво for?
Тем более можно было сделать ещё изящнее, но были-бы вопросы.
Тем более можно было сделать ещё изящнее, но были-бы вопросы.
Камиль Сабитов
Конечно куча сравнений лучше =) и внутри цикла и в конце цикла....
Камиль Сабитов
30К не упущение. Это ДАНО. Это как постоянная g=9.81 условно.
К слову - если код рассчитывали на отрицательные (хотя по условию числа натуральные) - у меня плохие новости. Остаток от деления отрицательного числа будет отрицательным.
К слову - если код рассчитывали на отрицательные (хотя по условию числа натуральные) - у меня плохие новости. Остаток от деления отрицательного числа будет отрицательным.
я ничего не знаю в С++, но видно же, что ты теряешь одну из 24, а вот 1 или последнюю - смотри сам
замени одну на 25 и увидишь какую, потом ищи глюк
замени одну на 25 и увидишь какую, потом ищи глюк
Похожие вопросы
- Салют Амигос) Откуда в рабочем коде выскакивает несуществующие число. Сделайте ревью по фасту. Много сил не отнимет))
- Ребят всех с новым 2021) Помогите изменить код своим ревью. Я по крайне мере его изучу и пойму как работает всё)
- Помогите пожалуйста написать код на c++, выводящий имя, фамилию и дату рождения нескольких человек
- Как сделать проверку на число типо если кто то ввел не число то будет чтото выводить на экран c++
- Нужно обьяснение кода
- С++, помогите пожалуйста с кодом, очень прошу, и можете коротко обьяснить код
- Помогите сделать код на С++ Не понимаю как это сделать
- Что нужно добавить в код, с++, очень нужно срочно
- Ошибки в коде. Почему не работает и как сделать чтобы заработало ?
- С++ Не могу понять где ошибка. Пишет: Программа выводит ответ в неверном формате. Вот код :