Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.75
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 14:56     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #1
Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k.


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

C++ вывод всех N значных чисел, сумма цифр которых = данному числу
Указать индексы и напечатать те элементы целочисленного массива X, сумма цифр которых равна заданному числу M C++
Даны натуральные числа k и s. Определите, сколько существует k-значных натуральных чисел, сумма цифр которых равна d. C++
C++ Среди всех N значных чисел указать те, сумма цифр которых равна заданному числу К
Найти все трехзначные числа, сумма цифр которых равна данному целому числу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
26.04.2010, 15:25     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #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;
}
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 16:45  [ТС]     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #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...)
Чисел много. Что то вроде степени надо делать...
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
26.04.2010, 16:53     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #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,' ');
Вот этот кусок программы что делает??
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 17:02  [ТС]     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #5
Я беру числа на промежутке от 100 до 999. То есть они все трехзначные. e-сотни, d-десятки,s-единицы. считаю их сумму и если сумма удовлетворяет данному числу k, то вывожу их

Добавлено через 2 минуты
То есть я облегчила себе задачу взяв числа на определенном промежутке. А он говорит что для всех n-значных надо, что то со степенью связано
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
26.04.2010, 17:13     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #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 можно организовать такой алгоритм, а вообще точно не знаю ))
А числа у вас должны вводиться с клавиатуры или генератором случайных чисел?
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 17:29  [ТС]     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #7
ну я всегда делаю задачи сначала на паскале а потом перевожу, в си я не очень. А вы не могли бы написать комментарии к каждому вашему действию?

Добавлено через 7 минут
с клавиатуры бы желетельно)
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
26.04.2010, 17:47     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #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;
}
но программа написана на С++, вам надо будет ее немного подредактировать под С (а именно, выходные потоки)
<Norton>
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
26.04.2010, 18:21     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #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;
}
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 22:15  [ТС]     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #10
пасибо вам большое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2011, 19:44     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k.
Еще ссылки по теме:

Определить количество М-значных натуральных чисел, у которых сумма цифр, стоящих в нечетных разрядах, равна N C++
C++ Найти количество N-значных чисел, у которых сумма цифр равна их произведению
Подсчитать количество четырёхзначных чисел, сумма цифр которых равна заданному числу C++

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

Или воспользуйтесь поиском по форуму:
leiprechain
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 30
14.12.2011, 19:44     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k. #11
Цитата Сообщение от rega Посмотреть сообщение
Я беру числа на промежутке от 100 до 999. То есть они все трехзначные. e-сотни, d-десятки,s-единицы. считаю их сумму и если сумма удовлетворяет данному числу k, то вывожу их

Добавлено через 2 минуты
То есть я облегчила себе задачу взяв числа на определенном промежутке. А он говорит что для всех n-значных надо, что то со степенью связано
А разве не наоборот. s - сотни, а e - единицы.
Или я что-то путаю?
Yandex
Объявления
14.12.2011, 19:44     Среди всех n-значных чисел указать те, сумма цифр которых равна данному числу k.
Ответ Создать тему
Опции темы

Текущее время: 00:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru