Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/45: Рейтинг темы: голосов - 45, средняя оценка - 4.96
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
1

Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k.

26.04.2010, 14:56. Просмотров 8356. Ответов 10
Метки нет (Все метки)

Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k.


Помогите решить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2010, 14:56
Ответы с готовыми решениями:

Среди всех N значных чисел указать те, сумма цифр которых равна заданному числу К
Не могу разобраться.... помогите! Код работает, но я видимо не правильно...

вывод всех N значных чисел, сумма цифр которых = данному числу
Составить программу вывода всех N значных десятичных чисел, сумма цифр которых...

Определить количество трехзначных натуральных чисел, сумма цифр которых равна данному числу
П. 5.4. Правил Запрещено создавать темы с бессмысленными названиями вроде...

Найти среди всех трёхзначных целых чисел те, у которых сумма цифр равна N
Народ я ешё новичёк в СИ! а препод злой задал задачку решить! плиз помогите...

Найти все трехзначные числа, сумма цифр которых равна данному целому числу
Найти все трехзначные числа?сумма цифр которых равна данному целому числу!...

10
NNN777
299 / 157 / 62
Регистрация: 27.02.2010
Сообщений: 317
26.04.2010, 15:25 2
Не понятно, что значит: "среди всех n значных чисел"... Должны случайно генерироваться n-значные числа?? или пользователь вводит разные числа, а программа должна выбрать n-значные да еще и с суммой цифр = k?
Программа для последнего варианта:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
const int sz=5;
using namespace std;
 
int main() 
{
    setlocale (LC_ALL, "Russian");
    int i=0, a[sz], b[sz], sum=0, k, n, l=0, z=0;
    cout<<"Введите n: ";
    cin>>n;
    cout<<"Введите k: ";
    cin>>k;
    cout<<endl;
 
    cout<<"Введите элементы массива: ";
    for (int i=0; i<sz; i++)
        cin>>a[i];
 
    for (int j=0; j<sz; j++)
    {
        int p=a[j];
        sum=0;
        z=0;
        while (p!=0)
        {
            sum+=p%10;
            p/=10;
            z+=1;
        }
        if (sum==k&&z==n)
            b[l++]=a[j];
    }
    if (l==0)
        cout<<"Таких чисел нет!\n";
    else
    {
        cout<<"результат: \n";
        for (int q=0; q<l; q++)
            cout<<b[q]<<" ";
    }
 
return 0;
}
0
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 16:45  [ТС] 3
Спасибо) вы сделали именно так как нужно было, но cin и cout мы не используем. Нельзя ли сделать по другому?

Добавлено через 33 минуты
Хотя нет. Я делала эту задачу на паскале:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  uses crt;
   VAR
    i,k,e,s,d:integer;
   BEGIN
    write('введите k= ');
    readln(k);
    for i:=100 to 999 do
    begin
    e:=i mod 100;
    d:=(i mod 100) div 10;
    s:=i div 100;
    if (e+d+s=k) then writeln(i,' ');
    end;
    readln;
    end.
Но препод сказал что не надо задавать определенный промежуток, как у меня(for i:=100 to 999 do...)
Чисел много. Что то вроде степени надо делать...
0
NNN777
299 / 157 / 62
Регистрация: 27.02.2010
Сообщений: 317
26.04.2010, 16:53 4
А на каком языке вам програмка-то нужна? если честно, теперь мне условие еще больше не понятно ...
Pascal
1
2
3
4
5
6
for i:=100 to 999 do //???
begin
e:=i mod 100;
d:=(i mod 100) div 10;
s:=i div 100;
if (e+d+s=k) then writeln(i,' ');
Вот этот кусок программы что делает??
0
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 17:02  [ТС] 5
Я беру числа на промежутке от 100 до 999. То есть они все трехзначные. e-сотни, d-десятки,s-единицы. считаю их сумму и если сумма удовлетворяет данному числу k, то вывожу их

Добавлено через 2 минуты
То есть я облегчила себе задачу взяв числа на определенном промежутке. А он говорит что для всех n-значных надо, что то со степенью связано
0
NNN777
299 / 157 / 62
Регистрация: 27.02.2010
Сообщений: 317
26.04.2010, 17:13 6
Ну вот, в моей програмке для всех n-значных чисел, смотрите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int j=0; j<sz; j++) //проходим циклом по всем введенным числам, напр: 2451 8954
        {
                int p=a[j]; //присваеваем переменной элемент массива, чтобы менять переменную, а не сам элемент
                sum=0; //сумме присваиваем =0, каждый раз для каждого элемента обнуляем сумму
                z=0; // считает порядок (как раз n)
                while (p!=0) //пока переменная не равна 0
                { //входим в цикл
                        sum+=p%10; //сумме присваиваем остаток переменной от деления на 10, напр: 2451%10=245 целых и 1 в остатке
                        p/=10; элементу присваиваем этот же элемент, деленный без остатка на 10, напр: 2451/10=245
                        z+=1; //порядок +1 (можно убрать)
                }
                if (sum==k&&z==n) //если сумма цифр числа=заданной, и порядок=заданному
                        b[l++]=a[j]; //этот элемент присваивается элементу нового массива
        }
Вы так и не сказали, на каком языке нужно реализовать. Но думаю, и на Pascal можно организовать такой алгоритм, а вообще точно не знаю ))
А числа у вас должны вводиться с клавиатуры или генератором случайных чисел?
0
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 17:29  [ТС] 7
ну я всегда делаю задачи сначала на паскале а потом перевожу, в си я не очень. А вы не могли бы написать комментарии к каждому вашему действию?

Добавлено через 7 минут
с клавиатуры бы желетельно)
0
NNN777
299 / 157 / 62
Регистрация: 27.02.2010
Сообщений: 317
26.04.2010, 17:47 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
const int sz=5; //задаем константный размер массива
using namespace std;
 
int main() 
{
        setlocale (LC_ALL, "Russian"); //подключаем русскую раскладку, можно писать русскими буквами
        int i=0, a[sz], b[sz], sum=0, k, n, l=0, z=0;
        cout<<"Введите n: "; //ввыводим на экран "Введите n"
        cin>>n; //считываем в переменную n введенное число (это порядок сколько цифр в числе)
        cout<<"Введите k: "; //ввыводим на экран "Введите к"
        cin>>k; //считываем в переменную к введенное число (это заданная сумма)
        cout<<endl; //переход на следующую строку
 
        cout<<"Введите элементы массива: "; //ввыводим на экран Введите элементы массива: "
        for (int i=0; i<sz; i++) //с 0 по 4 (i строго меньше sz,  а sz=5, см. верх)
                cin>>a[i]; //записываем в массив a введенные числа (5 чисел)
 //эта часть была описана ранее
        for (int j=0; j<sz; j++)
        {
                int p=a[j];
                sum=0;
                z=0;
                while (p!=0)
                {
                        sum+=p%10;
                        p/=10;
                        z+=1;
                }
                if (sum==k&&z==n)
                        b[l++]=a[j];
        }
        if (l==0) //если l=0, значит, в новый массив не записано ни одного числа, значит, в заданном ни одно число на соответствует
                cout<<"Таких чисел нет!\n"; //выводим сообщение, что таких чисел нет
        else //иначе (l не равно 0)
        {
                cout<<"результат: \n"; //выводим "результат"
                for (int q=0; q<l; q++) //с 0-го по l элемент (l - сколько всего было введено чисел в новый массив)
                        cout<<b[q]<<" "; //выводим элементы нового массива через пробел
        }
 
return 0;
}
но программа написана на С++, вам надо будет ее немного подредактировать под С (а именно, выходные потоки)
0
<Norton>
Отдыхающий:)
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
26.04.2010, 18:21 9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
unsigned int sum(unsigned int m);
unsigned int num(unsigned int n);
 
int main()
{
    unsigned int m;
    unsigned int n, k;
    scanf("%u\%u", &n, &k);
    for(m = num(n); m < num(n+1); m++)
        if (sum(m) == k)
            printf("%u\n", m);
    return 0;
}
 
unsigned int sum(unsigned int m)
{
    unsigned int s = 0;
    while (m != 0){
        s += m%10;
        m /= 10;}
    return s;
}
 
unsigned int num(unsigned int n)
{
    unsigned int i;
    unsigned int m = 1;
    for(i = 1; i < n; i++)
        m *= 10;
    return m;
}
1
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 22:15  [ТС] 10
пасибо вам большое
0
leiprechain
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 30
14.12.2011, 19:44 11
Цитата Сообщение от rega Посмотреть сообщение
Я беру числа на промежутке от 100 до 999. То есть они все трехзначные. e-сотни, d-десятки,s-единицы. считаю их сумму и если сумма удовлетворяет данному числу k, то вывожу их

Добавлено через 2 минуты
То есть я облегчила себе задачу взяв числа на определенном промежутке. А он говорит что для всех n-значных надо, что то со степенью связано
А разве не наоборот. s - сотни, а e - единицы.
Или я что-то путаю?
0
14.12.2011, 19:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2011, 19:44

Указать индексы и напечатать те элементы целочисленного массива X, сумма цифр которых равна заданному числу M
Доброе утро всем)))) Помогите плиз с задачей. Нужно Указать индексы и...

Найти количество N-значных чисел, у которых сумма цифр равна их произведению
Найти количество N- значных чисел , у которых сумма цифр равна их произведению...

Задача на рекурсию. Сколько существует k-значных натуральных чисел, сумма цифр которых равна s
Задание (нужно выполнять рекурсией): Даны натуральные числа k и s....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru