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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.75
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
#1

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

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

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


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

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

вывод всех N значных чисел, сумма цифр которых = данному числу - C++
Составить программу вывода всех N значных десятичных чисел, сумма цифр которых равна введённому с клавиатуры целому числу (<50).

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

Найти все трехзначные числа, сумма цифр которых равна данному целому числу - C++
Найти все трехзначные числа?сумма цифр которых равна данному целому числу! Ребята побыстрее надо, заранее спасибо!

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NNN777
299 / 157 / 19
Регистрация: 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;
}
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...)
Чисел много. Что то вроде степени надо делать...
NNN777
299 / 157 / 19
Регистрация: 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,' ');
Вот этот кусок программы что делает??
rega
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 28
26.04.2010, 17:02  [ТС] #5
Я беру числа на промежутке от 100 до 999. То есть они все трехзначные. e-сотни, d-десятки,s-единицы. считаю их сумму и если сумма удовлетворяет данному числу k, то вывожу их

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

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

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

Найти количество N-значных чисел, у которых сумма цифр равна их произведению (оптимизировать код) - C++
Здравствуйте! Снова приходится просить помощи уважаемых знатоков. Сам в оптимизации не силен. В этой задаче 2 теста из 10 не прошли по...

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

Определить количество М-значных натуральных чисел, у которых сумма цифр, стоящих в нечетных разрядах, равна N - C++
Определить количество М-значных натуральных чисел, у которых сумма цифр, стоящих в нечетных разрядах, равна N (1&lt;N&lt; 30,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.12.2011, 19:44
Ответ Создать тему
Опции темы

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