Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
saymeit
1 / 1 / 0
Регистрация: 13.09.2010
Сообщений: 34
#1

Вычислить число положительных целых, меньших n, таких, что их сумма цифр равна сумме цифр в n - C++

18.10.2015, 11:16. Просмотров 522. Ответов 11
Метки нет (Все метки)

Здравствуйте! Помогите плиз

Нужно написать программу, которая по целому положительному числу n вычисляет количество положительных целых чисел меньших n таких, что их сумма цифр (в десятичной записи) равна сумме цифр в числе n.

Формат входа: целое положительное число n<107.

Формат вывода: количество таких целых положительных чисел меньших n, у которых сумма цифр равняется сумме цифр числа n.

пример ввода:
123
пример вывода:
9
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2015, 11:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вычислить число положительных целых, меньших n, таких, что их сумма цифр равна сумме цифр в n (C++):

Найти все четырёхзначные числа, у которых сумма крайних цифр равна сумме средних цифр, а само число делится на 6 и 27 - C++
найти все четырёхзначные числа , у которых сумма крайних цифр равна сумме средних цифр , а само число делится на 6 и 27 . В С++

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

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

Определения, равна сумма цифр целой части вещественного числа сумме такого же количества цифр в дробной части - C++
Нада написать 2 программки 1. Определения, равна сумма цифр целой части вещественного числа сумме такого же количества цифр в дробной...

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

составить линейную программу (сумма двух первых цифр заданного четырёхзначного числа равна сумме двух его последних цифр) - C++
составить линейную программу , печатающую значение true , если указанное высказывание является истинным , и false - в противном случае. ...

11
sm_
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 12
20.10.2015, 13:11 #2
saymeit, есть какие-нибудь наработки?
0
saymeit
1 / 1 / 0
Регистрация: 13.09.2010
Сообщений: 34
22.10.2015, 00:04  [ТС] #3
Уже написал, может неоптимально конечно, но работает:
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
#include <iostream>
int sumOfDigit(int n) {
    int x = 0,y = 0;
    if(n < 0)   n *= -1;
    while(n>=1)
    {
        x = n%10;
        n /= 10;
        y += x;
    }
    return y;
}
 
int checkN(int value) {
    int cnt = 0;
    for (int i = 0; i < value; i++) {
        if (sumOfDigit(i) == sumOfDigit(value)) {
            cnt++;
        }
    }
    return cnt;
}
 
int main(int argc, const char * argv[]) {
    int N;
    while (std::cin >> N) {
        int res = checkN(N);
        std::cout << res << std::endl;
    }
    return 0;
}
1
Байт
Эксперт C
17662 / 11702 / 1863
Регистрация: 24.12.2010
Сообщений: 23,335
22.10.2015, 00:16 #4
Цитата Сообщение от saymeit Посмотреть сообщение
Уже написал,
Ну что ж. ИМХО, вполне прилично. На работу не проверял, но верю.
Цитата Сообщение от saymeit Посмотреть сообщение
может неоптимально
Есть одна существенная неоптимальность. sumOfDigit(value) повторяется в цикле value раз. И дает, естественно, одно и тоже значение. Может быть логичнее его вычислить до цикла?
0
saymeit
1 / 1 / 0
Регистрация: 13.09.2010
Сообщений: 34
22.10.2015, 00:29  [ТС] #5
Цитата Сообщение от Байт
Есть одна существенная неоптимальность. sumOfDigit(value) повторяется в цикле value раз. И дает, естественно, одно и тоже значение. Может быть логичнее его вычислить до цикла?
Да, благодарю за совет, так действительно будет лучше!
0
sm_
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 12
22.10.2015, 03:42 #6
в моем коде работает только та часть которая, считает сумму цифр в n, дальше беда.
по моему перемудрил с вложенными циклами, но не могу понять в чем конкретно ошибка. буду благодарен за помощь.
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
#include <iostream>
using namespace std;
 
int main () 
{
    int n = 0;
    int sum = 0;
    cin >> n;
    int n1 = n;
    while (n1 != 0) 
    {
        sum += n1 % 10;
        n1 /= 10;
    } 
    //cout << sum << " " << n << endl; // до этого места все работает
    
    int sumx = 0;
    int a = 0;
    int x = 1;
    for (x; x < n; x++) //здесь я пытаюсь перебрать числа от 1 до 'n'
    { // и посчитать цифр входящих в каждое, кол-во таких цифр записать в 'а'
     // и вывести получившееся 'a'
        while (x != 0) 
        {
            sumx += x % 10;
            x /= 10;            
        }
        if (sumx == sum) {
                 a++;
            }
    }
    cout << a << endl;
    return 0;
}
0
Байт
Эксперт C
17662 / 11702 / 1863
Регистрация: 24.12.2010
Сообщений: 23,335
22.10.2015, 10:54 #7
sm_, у тебя цикл по x. А внутри этого цикла ты этот x беспощадно меняешь
1
sm_
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 12
22.10.2015, 11:11 #8
Байт, исправил, но все равно не выходит - для числа 123, например, таких чисел должно быть девять,
а программа выдает что их ноль:
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
#include <iostream>
using namespace std;
 
int main () 
{
    int n = 0;
    int sum = 0;
    cin >> n;
    int n1 = n;
    while (n1 != 0) 
    {
        sum += n1 % 10;
        n1 /= 10;
    } 
    //cout << sum << " " << n << endl; // до этого места все работает
    
    int sumx = 0;
    int a = 0;
    int x = 1;
    int x1 = x;
    for (x; x < n; x++) //здесь я пытаюсь перебрать числа от 1 до 'n'
    { // и посчитать цифр входящих в каждое, кол-во таких цифр записать в 'а'
     // и вывести получившееся 'a'
        while (x1 != 0) 
        {
            sumx += x1 % 10;
            x1 /= 10;            
        }
        if (sumx == sum) {
                 a++;
            }
    }
    cout << a << endl;
    return 0;
}
0
Байт
Эксперт C
17662 / 11702 / 1863
Регистрация: 24.12.2010
Сообщений: 23,335
22.10.2015, 11:23 #9
Цитата Сообщение от sm_ Посмотреть сообщение
все равно не выходит
Строчку 20 спусти ниже. Под цикл.
1
sm_
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 12
22.10.2015, 11:44 #10
Байт, спасибо! спустил вот так:
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
#include <iostream>
using namespace std;
 
int main () 
{
    int n = 0;
    int sum = 0;
    cin >> n;
    int n1 = n;
    while (n1 != 0) 
    {
        sum += n1 % 10;
        n1 /= 10;
    } 
    //cout << sum << " " << n << endl; // до этого места все работает
    
    int sumx = 0;
    int a = 0;
    int x = 1;
    for (x; x < n; x++) //здесь я пытаюсь перебрать числа от 1 до 'n'
    { // и посчитать цифр входящих в каждое, кол-во таких цифр записать в 'а'
     int x1 = x;// и вывести получившееся 'a'
        while (x1 != 0) 
        {
            sumx += x1 % 10;
            x1 /= 10;            
        }
        if (sumx == sum) {
                 a++;
            }
    }
    cout << a << endl;
    return 0;
}
но теперь выдает что 1, а нужно 9
0
Байт
Эксперт C
17662 / 11702 / 1863
Регистрация: 24.12.2010
Сообщений: 23,335
22.10.2015, 11:57 #11
Цитата Сообщение от sm_ Посмотреть сообщение
но теперь
Вот беда! С тобой.
int sumx=0; тоже спусти. Ты ж накапливаешь там сумму цифр всех чисел!
Вообще, повнимательней следи, что же делает твой код. Прокручивай вручную. Пользуйся пошаговой отладкой. Промежуточными выдачами. Иначе будешь на каждый чих стенать - "Ой, что же это?!"
1
sm_
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 12
22.10.2015, 12:05 #12
Байт, спасибо за терпение, все получилось!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2015, 12:05
Привет! Вот еще темы с ответами:

Натуральное число, в котором n цифр, если сумма цифр возведённая в nую степень равна числу то вы вывесте число на экран(интервал чисел от 1 до k) - C++
Натуральное число, в котором n цифр, если сумма цифр возведённая в nую степень равна числу то вы вывесте число на экран(интервал чисел от 1...

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

Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу - C++
Требуется помощь.. Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому...

Подсчитать количество "счастливых" шестизначных автобусных билетов(сумма первых трех цифр равна сумме трех последних цифр) - C++
Подсчитать количество &quot;счастливых&quot; шестизначных автобусных билетов, т.е таких, в номерах которых сумма трех первых цифр равна сумме трех...


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

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

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