Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
saymeit
1 / 1 / 0
Регистрация: 13.09.2010
Сообщений: 34
#1

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

18.10.2015, 11:16. Просмотров 545. Ответов 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
Ответы с готовыми решениями:

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

Вывести ok , если сумма первых двух цифр числа равна сумме остальных его цифр
От пользователя вводится 4-х значное число. Вывести ok , если сумма первых двух...

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

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

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

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
17938 / 11929 / 2478
Регистрация: 24.12.2010
Сообщений: 24,030
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
17938 / 11929 / 2478
Регистрация: 24.12.2010
Сообщений: 24,030
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
17938 / 11929 / 2478
Регистрация: 24.12.2010
Сообщений: 24,030
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
17938 / 11929 / 2478
Регистрация: 24.12.2010
Сообщений: 24,030
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
22.10.2015, 12:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2015, 12:05

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

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

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


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

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

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