Mail.RuПочтаМой МирОдноклассникиИгрыЗнакомстваНовостиПоискВсе проекты

Подсчитать количество 3-значных чисел,сумма цифр которых меньше либо равна 24

Мастер (1052), закрыт 8 лет назад
Вот мой вариант программы.Сначала я пытался реализовать ее через ручной ввод числаа,потом понял,что я неправильно понял условие...Стал пытатся решить через подчет собственно чисел....В и тоге получился этот бред....Исправьте,пожалуйста,если таковое возможно,данную програму до состояния работы!)
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
const int n=3;
int c=100,k,kol,m=0,a[n],b[255];
while (c<=999) //*
{
if (m<=24)
{
for (int i=1; i<4; i++)
{cout<<"vvedite "<<i<<">>a;
m+=a;
}
}
k=0;
for (int k=1; k<4; k++)
{
cin>>b[k];
}
}//*
_getch();
}
Дополнен 8 лет назад
VLynx:Данная программа выводит числа,сумма цифр которых =24,а это немного не то
Андрей:я так и не понял,что считает данная программа)Причем,если заменять / на %-выдает разные результаты....В чем дело,точнее за что отвечает % а з что / ???
Александр Олейник: на самом деле их 899-10=799
Лучший ответ
Писал что-то подобное, но давно, еще на первом курсе.. . Делал через операции деления нацело и взятия остатка от деления (первая div, вторая %, если правильно помню) . Получаешь откуда-либо числа и пропускаешь через цикл (a - число с которым работаем, n - искомое количество трехзначных чисел, прочие переменные - вспомогательные) :

k := 0;
k := a div 100; // делим число нацело на 100, то есть число сотен, результат пишем во вспомогательную переменную
a := a % 100; // берем остаток от деления числа нацело на 100, и присваиваем той же переменной
k := k + a div 10; // теперь берем остаток от деления на 10, то есть число десятков и отправляем по тому же адресу, что и число сотен
a := a % 10;
k := k + a;
if k <= 24
n = n +1;

Например, есть число 153 - а будет последователньо принимать значения 153, 53, 3, k - 1, 6, 9.
Остальные ответы
Можно гораздо проще:

#include <iostream.h>
#include <conio.h>

void main()
{
clrscr();
int k=0;
for(int i2=6;i2<10;i2++)
for(int i1=15-i2;i1<10;i1++)
{ k++;
cout << k << " - " << i2*100+i1*10+24-i2-i1 << endl;
}
getch();
}
========================

Demogorogon: Извини, не заметил, что числа меньше либо равно, вот фикс программы:

#include <iostream.h>
#include <conio.h>

void main()
{
clrscr();
int k=0;
for(int i2=1;i2<10;i2++)
for(int i1=0;i1<10;i1++)
for(int i0=0;i0<10 && i2+i1+i0<=24;i0++)
{
k++;
cout << k<< " - " << i2*100+i1*10+i0 << endl;
}
getch();
}

Если числа выводить не надо, просто удали строчку вывода из цикла, а значение k потом распечатай.
#include <stdio.h>
int main()
{
int retval = 0;
for (int i = 100; i <= 999; ++i)
{
int c1 = i % 10;
int c2 = (i /10 ) % 10;
int c3 = i / 100;
if (c1 + c2 + c3 <= 24) ++retval;

}
printf("Result: %d", retval);
getchar();
}

Это - подсчет таких чисел. Вообще-то можно и вручную. Ответ получился - 890.
FIX: ответы не восприняли , разделил пробелом :-)
а я в уме посчитал 888-99=789 штук
Комментарий удален
Задача действительно решается в уме.
Всего существует 900 трёхзначных чисел (а не 899 и уж тем более не 888). Нужно убрать все числа, сумма цифр которых больше 24., тоесть 25, 26 или 27.

27 даёт одно число - 999
26 дают 3 числа - 998,989 и 899
25 дают 6 чисел - 997,979,799,988,898,889

Других вариантов нет. То есть результат
900 - 10 = 890

ЗЫ
Если не веришь, что трёхзначных чисел 900 запусти такую программку

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

и выведи значение переменной result.

Похожие вопросы
Также спрашивают