Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
1

Не знаю как отладить

14.03.2019, 19:20. Показов 1848. Ответов 32

Author24 — интернет-сервис помощи студентам
Здравствуйте. Мне помогли решить задачу на informatics. Но она прошла не все тесты. Какие не знаю. Не получилось ничего.
Пожалуйста помогите

У Миши развитое эстетическое чувство. Он считает, что не все числа одинаково порядочные. Когда ему грустно, он начинает придумывать числа и приводить их в порядок.

Миша очень любит рассматривать сумму цифр числа. Для того чтобы привести в порядок число A, он сначала записывает само число. Потом он пишет сумму цифр этого числа. Затем — сумму цифр суммы цифр и так далее, до тех пор, пока очередное число не станет однозначным. Он считает, что результатом приведения в порядок числа A является сумма всех выписанных чисел, включая само число A.

Миша настолько любит этот процесс, что он даже заменяет ему счёт овец, когда долго не получается заснуть. Он помнит, что вчера ночью, когда он в уме привёл в порядок число A, у него получилось число B. Но вот беда — он не помнит, какое именно он взял число A! Помогите ему в отыскании этого числа.

Входные данные
На ввод подаётся единственное целое число B (1 ≤ B ≤ 109 )

Выходные данные
Если существует такое число A, что после приведения его в порядок, получается B, то выведите любое такое число. Если же Миша где-то ошибся в расчётах и такого числа не существует, то выведите -1.

Примеры тестов
входные данные
42
выходные данные
29
входные данные
20
выходные данные
-1
Примечание
Пояснение к первому примеру. Последовательность сумм цифр для 29 состоит из чисел 29, 11, 2. Соответственно, после приведения в порядок число 29 превращается в число 42 = 29 + 11 + 2.
Вот решение:
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
#include <iostream>
using namespace std;
long long a = 0, b, c, e, d;
int main()
{
    cin >> b;
    do {
        a++;
        c = a;
        e = a;
        do {
            d = 0;
            while (e > 0) {
                d += e % 10;
                e /= 10;
            }
            e = d;
            c += d;
        } while (e >= 10);
    } while (c != b && a != b);
    if (c != b) {
        cout << -1;
        return 0;
    }
    else {
        cout << a;
    }
 
}
ИЛИ ВОТ

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
#include <iostream>
void getSumOfNumerals(int i, int& globalSum)
{
    int sum = 0;
    while((double)i / 10)
    {
        sum += i % 10;
        i /= 10;
    }
 
    globalSum += sum;
    if (sum / 10)
        getSumOfNumerals(sum, globalSum);
}
 
void checker(int b)
{
    for(int i = 1; i < b; i++)
    {
        int globalSum = i;
        getSumOfNumerals(i, globalSum);
        if (globalSum == b)
        {
            std::cout  << i << std::endl;
            return ;
        }
    }
    std::cout << -1 << std::endl;
}
 
int main()
{
    int b;
    std::cin >> b;
    checker(b);
    system("pause");
}
У всех 2-их решениях одно и тоже(ФОТО)
Миниатюры
Не знаю как отладить   Не знаю как отладить  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2019, 19:20
Ответы с готовыми решениями:

Подскажите ,как отладить прогу
В матрице n*n поменять местами элементы симметрично побочной диагонали. пример: исходные данные :...

Как отладить консольную программу?
Как делать отладку в VS если мы вызываем наш проект в консоли в windows и передаем параметры в этой...

Не понимаю как отладить программу
День добрый. Сделал задание на informatics. Но почему-то оно так сказать, не работает. Можете...

Как обозначить дату если я знаю только месяц и год, а число не знаю
чтобы был формат ячейки дата например xx.10.2016 дату я не знаю! Добавлено через 2 минуты...

32
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
14.03.2019, 22:44 2
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i = 1; i < b; i++)
{
    int globalSum = i;
    getSumOfNumerals(i, globalSum);
    //НЕ НУЖНО ТАК ПРОВЕРЯТЬ!!! ПРОЧТИТЕ ТО, ЧТО Я ВАМ ПИСАЛ - ТАМ ЕСТЬ ОБЪЯСНЕНИЕ!!!
    if (globalSum == b)
    {
         std::cout << i << std::endl;
         return ;
    } 
    else 
        std::cout << -1 << std::endl;
   return;
}
1) Во-первых, этот код не Ваш, это я Вам его написал в другой теме, врать не нужно.
2) Во-вторых, код работает верно, но, конечно, не этот, где Вы свои исправления внесли, а изначальный, с той темы.
3) В-третьих, Вы мне писали и в той теме по поводу
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
мне выводит кучу единиц
Я Вам тогда сказал - возьмите мой код и ничего не меняйте в описанных условиях. Для оптимизации - меняйте лишь границы цикла.
4) В-четвёртых - когда Вы мне на почту написали с этой же просьбой
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
мне выводит кучу единиц
я Вам объяснил, почему Ваша редакция кода неправильна, почему единицы выводит и тд. Посоветовал, как можно задачу оптимизировать.
И что я вижу? Воз и нынче там. Используется та же самая, перековерканная Вами версия, которую я ДВАЖДЫ(!) прокомментировал и объяснил, что Вы не так делаете.
Ссылку на старую тему сейчас приведу.
Не понимаю задачу
1
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
14.03.2019, 22:48  [ТС] 3
прошу прощения...
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
14.03.2019, 22:57 4

Не по теме:

Это просто треш...



Добавлено через 2 минуты
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
прошу прощения...
Вот этот код верный. Пляшите отсюда. Попробуйте поизменять границы расчёта, как я и писал.
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
#include <iostream>
void getSumOfNumerals(int i, int& globalSum)
{
    int sum = 0;
    while((double)i / 10)
    {
        sum += i % 10;
        i /= 10;
    }
 
    globalSum += sum;
    if (sum / 10)
        getSumOfNumerals(sum, globalSum);
}
 
void checker(int b)
{
    for(int i = 1; i < b; i++)
    {
        int globalSum = i;
        getSumOfNumerals(i, globalSum);
        if (globalSum == b)
        {
            std::cout << "Nice. Number is" << i << std::endl;
            return;
        }
    }
    std::cout << "Bad :( - " << -1 << std::endl;
}
 
int main()
{
    int b;
    std::cin >> b;
    checker(b);
    system("pause");
}
Добавлено через 5 минут
Если не получится оптимизировать - попробуйте придумать что-то другое. Не зацикливайтесь на одном решении, возможно, далеко не оптимальном
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
16.03.2019, 20:41 5
CyberNinjaProg, А без Миши можно рассказать, в чем суть задачи?
0
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
16.03.2019, 20:44  [ТС] 6
Я так понял что суть задачи найти число (наибольшее) в котором:
Например 42: это число 29(путем решения)
2+9=11
1+1=2
и вот.
Я так понял
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
16.03.2019, 20:56 7
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
Я так понял что суть задачи найти число (наибольшее) в котором:
Например 42: это число 29(путем решения)
Да не надо это ни кому, и примеров тоже. Если вы не сможете изложить суть задачи без этого "олимпиадного мишки", значит вы ее не поняли. А в этом мало кто сможет вам помочь.
0
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
16.03.2019, 20:58  [ТС] 8
Так я вам наглядно рассказал в чем у меня проблема...
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
16.03.2019, 21:11 9
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
Так я вам наглядно рассказал в чем у меня проблема...
Спасибо! Мише - привет!
0
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
16.03.2019, 21:12  [ТС] 10
Вы не можете мне помочь,так?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
16.03.2019, 21:21 11
CyberNinjaProg, А я вам разве не сказал, в чем МОЯ проблема? Меня от этих Мишь и Петь давно уже тошнит. И разбирать ихние отношения мне, извините, недосуг. И я прошу нормальную постановку, без всей этой лабуды. Если вы ее сформулировать не в силах - это ваша проблема. Если вам также недосуг изложить задачу нормально, ну что ж, на этом и разойдемся.

Добавлено через 3 минуты
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
Вы не можете мне помочь,так?
Не знаю. Пока - нет

Не по теме:

Старинная притча. Тонет Жадина. Все кричат - дай руку! Не дает, тонет. Один умник нашелся - "Возьми руку!" Спасли чувака...

0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
16.03.2019, 21:33 12
Скиньте ссылку на страницу, на которой нужно проверять решение
0
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
16.03.2019, 21:36  [ТС] 13
https://informatics.mccme.ru/m... rid=111505

Вот
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
16.03.2019, 22:35 14
Смотрите. Я сам протестировал там решения и что я могу сказать - на сайте есть ошибочные ответы и это факт. Когда проходить просто от 1 до b - оно всегда в 3 и 4-м ответах выдаёт ошибку, но если проходить от b до b / 2 - 3-й тест засчитывает. Что это значит? Это значит, что где-то у них верным ответом считается -1, хотя на самом деле ответ для этого числа есть в виде суммы. Вообщем, я добился 10 верных ответов и забросил это дело, что и Вам советую)

Последний код, где проходит 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
35
36
void getSumOfNumerals(long i, long& globalSum)
{
    long sum = 0;
    while (i)
    {
        sum += i % 10;
        i *= 0.1;
    }
 
    globalSum += sum;
    if ((int)(sum * 0.1))
        getSumOfNumerals(sum, globalSum);
}
 
void checker(long b)
{
    const long mid = b * 0.5;
    for (long i = b; i > mid; --i)
    {
        long globalSum = i;
        getSumOfNumerals(i, globalSum);
        if (globalSum == b)
        {
            std::cout << i;
            return;
        }
    }
    std::cout << -1;
}
 
int main()
{
    long b;
    std::cin >> b;
    checker(b);
}
0
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
16.03.2019, 22:41  [ТС] 15
Я вас благодарю за огромную помощь. Вам огроооооооомное спасибо, что смогли помочь хоть и в позднее время)
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
16.03.2019, 22:43 16
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
Я вас благодарю за огромную помощь. Вам огроооооооомное спасибо, что смогли помочь хоть и в позднее время)
Да я фактически и не помог ничем) До конца-то тесты код не проходит (10/12). Но далеко не факт, что тут вина только программистов.
0
ildwine
16.03.2019, 23:30
  #17
 Комментарий модератора 
CyberNinjaProg, прекращайте создавать копии тем. Официально предупреждаю. Дальше будут санкции.
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
17.03.2019, 00:16 18
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
на сайте есть ошибочные ответы и это факт
Вы пришли к такому выводу, пытаясь сдать неверное решение? Если еще есть интерес, проверьте числа 36, 45, 101, 103, 107, 109. Для них решение существует (27, 36, 100, 101, 103, 104), ваша программа выдает -1.
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
17.03.2019, 02:38 19
Цитата Сообщение от valen10 Посмотреть сообщение
Вы пришли к такому выводу, пытаясь сдать неверное решение? Если еще есть интерес, проверьте числа 36, 45, 101, 103, 107, 109. Для них решение существует (27, 36, 100, 101, 103, 104), ваша программа выдает -1.
Эм, проверил и результат такой же, который Вы указали. Где Вы там себе -1 привидели...
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
17.03.2019, 02:44 20
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
проверил и результат такой же
Прошу прощения, с функциями ошибся при проверке. Однозначные числа попробуйте на вход подать.
1
17.03.2019, 02:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2019, 02:44
Помогаю со студенческими работами здесь

Как отладить мою dll, используемую как плагин в стороннем приложении?
Добрый день. Исходные данные: VS2015, .Net Framework 4, исходный код моей dll на С#, моя dll,...

Как отладить службу?
Пытаюсь отладить свою самодельную windows-службу. Установил, запустил экзешник. Через меню Visual...

Как отладить JS на сайте?
На сайте перестали работать некоторые JS скрипты, Chrome Dev Tools не определяет причин проблемы....

Как отладить программу?
#include &lt;vcl.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; int massiv(double x1,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru