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

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

Восстановить пароль Регистрация
 
Lesepka
0 / 0 / 0
Регистрация: 28.09.2009
Сообщений: 7
30.11.2010, 10:50     Сколько можно? #1
Задано натуральное число N. От данного числа вычтем сумму цифр этого числа, от полученного числа опять вычтем сумму цифр и т.д. Данную операцию будем продолжать до тех пор, пока полученное число положительно. Сколько раз будем выполнять данную операцию?

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

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

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

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

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

что-то голова совсем не варит...
Буду очень благодарна
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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     Сколько можно?
Ответ Создать тему
Опции темы

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