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

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

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

Сколько можно? - C++

30.11.2010, 10:50. Просмотров 737. Ответов 4
Метки нет (Все метки)

Задано натуральное число N. От данного числа вычтем сумму цифр этого числа, от полученного числа опять вычтем сумму цифр и т.д. Данную операцию будем продолжать до тех пор, пока полученное число положительно. Сколько раз будем выполнять данную операцию?

Технические условия

Входные данные

Во входной строке находится число N, которое не превышает 2000000000.

Выходные данные

Количество выполненных операций

что-то голова совсем не варит...
Буду очень благодарна
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2010, 10:50     Сколько можно?
Посмотрите здесь:

C++ Подсчитать сколько треугольников можно составить из чисел
C++ На сколько квадратов можно разрезать данный прямоугольник?
За сколько можно выучить C++ на достаточном уровне? C++
C++ Сколько можно получить регистрационных ключей
За сколько можно выучить C++? C++
Сколько палиндромов длиной n можно образовать из 26 букв C++
C++ Сколько бутылок воды можно выпить на n грн, учитывая, что пустые бутылки можно сдавать, и на полученные деньги приобрета
C++ Определить сколько деталей можно изготовить за смену
C++ Узнать сколько максимально прямоугольников можно составить из ветвей
C++ Сколько цифр можно составить из заданных букв?
C++ Сколько животных можно купить за 100 рублей?
Сколько раз можно пройти путь C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
30.11.2010, 12:38     Сколько можно? #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
#include <iostream>
 
int main()
{
    int N;
    std::cout << "N = ";
    std::cin >> N;
 
    int counter = 0, temp, sum = N;
    while(sum > 0)
    {
        counter++;
        temp = sum;
        while(temp != 0)
        {
            sum -= temp % 10;
            temp /= 10;
        }
    }
    std::cout << counter << std::endl;
    system("Pause");
    return 0;
}
spy_3462
6 / 6 / 1
Регистрация: 19.11.2010
Сообщений: 18
30.11.2010, 13:42     Сколько можно? #3
Цитата Сообщение от besstiaa Посмотреть сообщение
Как-то так...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
int main()
{
    int N;
    std::cout << "N = ";
    std::cin >> N;
 
    int counter = 0, temp, sum = N;
    while(sum > 0)
    {
        counter++;
        temp = sum;
        while(temp != 0)
        {
            sum -= temp % 10;
            temp /= 10;
        }
    }
    std::cout << counter << std::endl;
    system("Pause");
    return 0;
}
Доброго времени суток!
Проходил мимо, стало интересно!
Тестирование...
N=1590
Результат кода 131
т.е. 1+5+9+0=15
15х131=1605
Результат ответа НЕВЕРНО! (правильный ответ 106)
П.С. Ничего личного
П.П.С. Т.к. было интересно реализовал задачку на c#, но ветка не та поэтому код не выкладывался!
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
30.11.2010, 14:07     Сколько можно? #4
Цитата Сообщение от spy_3462 Посмотреть сообщение
N=1590
Результат кода 131
т.е. 1+5+9+0=15
15х131=1605
Результат ответа НЕВЕРНО! (правильный ответ 106)
Не понял связи между количеством вычитаний из числа суммы его цифр и произведением первой суммы на это количество. Сделал другой вариант - по сути не правильный (из-за аццкой рекурсии до 2000000000 ни за какие коврижки не досчитает), но на меньших числах выдаёт такой же результат, как у besstiaa

spy_3462, думаю, загвоздка в том, что нужно каждый раз сумму цифр вычислять, а не только для исходного числа... В виде исключения выложите свой код на C# - по крайней мере логика ясна будет...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int sum(int number){
    return ( number < 10 ) ? number : number % 10 + sum(number / 10);
}
 
int cnt(int number){
    int s = sum(number);
    return ( number > s ) ? 1 + cnt(number - s) : 1;
}
 
int main(void){
    int num;
    
    while ( printf("Number: ") && scanf("%d", &num) == 1 && num > 0 )
        printf("%d operations.\n", cnt(num));
    
    return 0;
}
spy_3462
6 / 6 / 1
Регистрация: 19.11.2010
Сообщений: 18
30.11.2010, 14:25     Сколько можно? #5
Быдло код на C#
Вместо использования Math.Pow() изобрел велосипед в виде рекурсивной функции stepen()
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
44
45
46
47
using System;
namespace arr
{
    class Program
    {
        static int stepen(int m,int n)
        {
            if (n!=0)
                return m*stepen(m,n-1);
            else return 1;          
        }
        public static void Main(string[] args)
        {
            int n=int.Parse(Console.ReadLine());
            int[] arr1=new int[9];
            int m=10;           
            int k=0;
            for(int i=arr1.Length;i>0;i--)
            {
                if (i==arr1.Length)
                {
                    arr1[i-1]=n/stepen(m,i-1);
                    k=stepen(m,i-1)*arr1[i-1];
                }
                else
                {
                    arr1[i-1]=(n-k)/stepen(m,i-1);
                    k+=stepen(m,i-1)*arr1[i-1];
                }
            }
            // Собираю сумму цифр тут!!!
            int z=0;
            foreach (int i in arr1)
                z+=i;
            if (z!=0)
            {
                int y=0;
                while((n-z*y)>0)
                {y++;}
                Console.WriteLine("{0} - ({1} x [{2}]) = {3}",n,z,y,n-z*y);
            }
            else
            {Console.WriteLine("Решения нет");};
            Console.ReadKey(true);
        }
    }
}
Yandex
Объявления
30.11.2010, 14:25     Сколько можно?
Ответ Создать тему
Опции темы

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