Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Задача на нахождение числа 
:(
    Опции темы
Dov
Дата 25.11.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



AlexST, а что там комментировать, там всего один маленький цикл, который выводит каждый раз одну цифру.  Если посмотреть на это число 105263157894736842 внимательно, то мы увидим, что оно представляет собой сумму степеней двойки, умноженную на 10 в степени n - 1. Например, последние три цифры этого числа(842) можно записать так: 2 + 2*2*10+2*2*2*100, ну и так далее, пока не получим нужное число.  


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 25.11.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Может быть так понятнее будет
Код
#include <stdio.h>
#include <conio.h>

int main()
{
    int num = 2;

    do 
    {
        printf("%d", num / 2);
        num = num / 2 + num % 2 * 10;

    }while(num != 2);

    printf("\nPress any key to quit...\n");
    getch();

    return 0;
}

Берём число 2 и начинаем делить его на 2, прибавляя к результату остаток от деления, умноженный на 10, пока сам результат не будет равен 2. Последовательность цифр между этими двумя двойками(включая последнюю) и есть искомое число.  smile  




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
AlexST
Дата 22.12.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 30.4.2006
Где: Москва

Репутация: 2
Всего: 3



Dov, ты просто привел два разных способа, а я думал, что это один и тот же. Поэтому не понял.  smile 
PM MAIL ICQ   Вверх
Dov
Дата 22.12.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(AlexST @  22.12.2006,  16:02 Найти цитируемый пост)
Dov, ты просто привел два разных способа

AlexST, способ один, реализация разная.  smile  


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
AlexST
Дата 23.12.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 30.4.2006
Где: Москва

Репутация: 2
Всего: 3



Да,  smile , действительно, способ один.
Только ты всё-таки не смог объяснить мне всё с точки зрения математики.
Комментируешь действия, а я прошу логику...
Сам себе объясняю как надо  smile :

Цитата(Dov @  25.11.2006,  18:16 Найти цитируемый пост)
Если посмотреть на это число 105263157894736842 внимательно, то мы увидим, что оно представляет собой сумму степеней двойки, умноженную на 10 в степени n - 1. Например, последние три цифры этого числа (842) можно записать так: 2 + 2*2*10+2*2*2*100, ну и так далее, пока не получим нужное число.  

Начинать решение с рассмотрения ответа нехорошо.
Намного лучше сказать опираясь на вычисления искомого числа: оно будет суммой степеней двойки соответственно умноженных на 10^(n-1) (а почему??), т. к. для вычисления значения каждого более старшего разряда этого числа мы должны умножить исходный на 2 (вследствие условия перестановки 2 в конце), а 10 берется от веса разряда. (а это другой способ, так скать "вычисление с конца", ИМХО более понятный)


Код

#include <stdio.h>
#include <conio.h>
              //а тут вычисляем "с начала"
int main()
{
    int num = 2;

    do 
    {
        printf("%d", num / 2);//почему? да т.к. искомое получаем делением большего на 2
        num = num / 2 + num % 2 * 10;// здесь ваще не въехал сначала...
            //а всё просто: увеличиваем известную цифру исходного числа на величину переноса в старший 
            //разряд большего числа
            
    }while(num != 2);//условие при выполнении показывает, что мы уже напечатали последнюю цифру
                                //искомого числа, т. к. получившийся "младший" несуществующий разряд большего 
                                //числа сравнялся с 2

    printf("\nPress any key to quit...\n");
    getch();

    return 0;
}


Это сообщение отредактировал(а) AlexST - 23.12.2006, 14:24
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.