Kardel Sharpeye
Ученик
(117)
15 лет назад
Писал что-то подобное, но давно, еще на первом курсе.. . Делал через операции деления нацело и взятия остатка от деления (первая 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.
VLynx
Профи
(859)
15 лет назад
Можно гораздо проще:
#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 потом распечатай.
Андрей
Мыслитель
(6466)
15 лет назад
#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: ответы не восприняли , разделил пробелом :-)
Владимир Ульянов
Гуру
(4396)
15 лет назад
Задача действительно решается в уме.
Всего существует 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.
#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();
}