Разминка для мозгов: проверить наличие двух одинаковых цифр в числе
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Сегодня в разделе «Готовые решения» обнаружил програму на Паскале для проверки наличия двух одинаковых цифр в числе.
Задача:
Если решение перевести с Pascal на C++, оно выглядит так:
Программа работает правильно. Но есть некоторые «шероховатости» как в плане эффективности, так и в плане стиля.
Задание:
Придумайте другой, желательно более оптимальный, алгоритм решения этой задачи и напишите программу.
Примечания. (1) Задание несложное, для новичков. (2) Считаем, что всегда вводится корректное число: положительное целое в пределах типа
int
(со знаком). (3) При написании программы постарайтесь придерживаться хорошего стиля программирования.Cranium, так там используется чтение из файла, подшаманьте с библиотекой fstream. С чтением программа становится сложнее )
И для красоты программки подправьте слово Number ))
Новички могут не догнать
15:47
Попробую собрать на коленке
что-то вроде:
Ahmasoft, очепятку в строке поправил.
На счёт «там используется чтение из файла, подшаманьте с библиотекой fstream» — не понял. Чтение из файла ни «там», ни «здесь» не используется. К тому же эта задачка на соображалку, а не на знание работы с вводом-выводом.
«Новички могут не догнать» — а вот здесь как раз пускай догоняют. Не такой уж и крутой финт.
Пусть лучше так не делают.
Когда одна переменная используется
для хреновой тучи целей, хочется удавить.
В том коде не хватает только
Да и вывод раскидан хрен пойми как.
В общем, код сам по себе выглядит не ахти.
Croessmah, не думал, что позиционируешь себя новичком ;-)
Есть, работает.
Ещё варианты?..
Croessmah,
Я в задании поэтому и сделал приписку о хорошем стиле программирования.
Ну так если я новичок,
что тут скрывать то уж? :D
Никита, код рабочий.
#include <string>
— лишнее.По эффективности хуже, чем исходный вариант программы: количество выполнения тела внутреннего цикла
while
в самом плохом случае равноN * 10
. ГдеN
— количество цифр в числе.Для исходной программы это количество равно
N / 2 * (N - N % 2)
.Для варианта Croessmah количество выполений тела цикла равно
N
.Ещё варианты будут?
такой же, только без массива:
М-да... не густо. Своей пассивностью удивили, в первую очередь, новички. В комментах к урокам регулярно появляются пожелания увидеть «упражнения», «домашние задания» и пр. Вот вам упражнение. Есть где и покодить и мозгами пошевелить.
В заключение приведу свой вариант решения. Он очень похож на вариант от Croessmah, но без массива. В качестве флагов используются биты целой переменной.
А вообще разминка для мозгов кому-то интересна? Или можно не париться?
UPD. Пока писал сообщение, Croessmah залил свой второй вариант решения, совпадающий с моим.
Ресурс не популярный, так что посетителей тоже не много.
Постоянных — вообще единицы.
Соответственно интересно это,
в крайнем случае, нескольким лицам.
Думаю, можно не париться.
Хотя если вам интересно, то можно всё :)
Ну, это достаточно популярное решение данной задачи,
так что не думаю, что это можно назвать моим или Вашим решением.
Можно париться, пожалуйста. Вы занимаетесь очень полезным делом, по крайней мере, для людей вроде меня. Не всем по..., не верьте.
Постараюсь вскоре предложить свой вариант. Хотя не уверен, что моя идея намного лучше популярного решения.
Спасибо вам!