Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2011, 22:21   #31
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию

Ограничение по времени 2 секунды) мое решение вроде должно пройти... еще не закодил. Для меня решить математимически как то легче, чем закодить. Свое еще не знаю как закодится
boomeer вне форума Ответить с цитированием
Старый 01.02.2011, 22:25   #32
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

i++ медленнеей, чем --i. А ещё, isOnes лучше сделать inline, не будет тратиться время на вызов функции.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 01.02.2011, 22:29   #33
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

при оптимизации компилятор сам решает ставить inline или нет, и если даже там оно стоит, компилятор его уберет, если посчитает его не нужным
NiCola999 вне форума Ответить с цитированием
Старый 01.02.2011, 22:33   #34
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Это разве не зависит от флагов оптимизации?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 01.02.2011, 22:40   #35
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

зависит, но зачем их трогать
NiCola999 вне форума Ответить с цитированием
Старый 01.02.2011, 22:41   #36
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

для автора- в 100 21 а не 20
Акоб вне форума Ответить с цитированием
Старый 01.02.2011, 22:41   #37
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Ты это ещё гентушникам скажи
Я к тому, что у кого-то он сам доставит, у кого-то нет, так что надёжней тут поставить.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 01.02.2011, 22:43   #38
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

решение практически "в лоб"
полный перебор на моём древней компьютере ~3 с половиной минуты.
для N = 999999999
количество чисел с единичкой: 612 579 511
(правильно считает или нет - не могу сказать, вручную долго пересчитывать ))
вот собственно код перебора:
Код:
function OneInNumber(N : longint; var AddCount : longint) : boolean;
begin
  OneInNumber := false;
  AddCount := 1;
  while N > 0 do begin
    if (N mod 10 ) = 1 then begin
      OneInNumber := true;
      Exit
    end;
    AddCount := AddCount * 10;
    N := N div 10;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,count, N, addCnt : longint;
begin
  N := 999999999;
  count := 0;
  i := 1;
  while i<=N do begin
    if OneInNumber(i, addCnt) then
       begin
         if (i+addCnt)<=N
            then inc(count, addCnt)
            else inc(count, N-i+1);
         inc(i, addCnt);
       end
       else inc(i);
  end;
  Edit1.Text := IntToStr(count);
end;
p.s. при N = 50 чисел с единичкой всё таки 14, а не 15, как тут предполагалось..


_______________
по хорошему, этот мой пост можно было удалить, т.к. ничего нового он не говорит,
да и тема C/C++ - чего я тут выперся со своим Паскалем, непонятно...
Ну ладно, пусть остаётся, может в толпе других его никто и не заметит..

Последний раз редактировалось Serge_Bliznykov; 01.02.2011 в 22:56.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.02.2011, 22:49   #39
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вот "лобовое" решение с использованием string.

Код:
int a = 100000000;
int s = 0;
AnsiString str;
for(int i=0; i<a; i++)
  {
  str = IntToStr(i);
  for(int j=1; j<=str.Length(); j++)
    {
    if(str[j] == '1') s++;
    }
  }
Button3->Caption = s;
Этот расчёт мой комп делает за 100 секунд.
Результат 80000000.

Для 100 - результат 20.
Для 200 - 140.
Для 1000 - 300.
Для 10000 - 4000.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 01.02.2011 в 23:06.
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.02.2011, 22:52   #40
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
при N = 50 чисел с единичкой всё таки 14, а не 15, как тут предполагалось...
если считать общее кол-во единиц от 1 до 50, то их 15. Но как оказалось надо считать числа в которых есть хотя бы одна 1. Тогда да их 14

Последний раз редактировалось NiCola999; 01.02.2011 в 22:59.
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчитать количество слов, в которые входит символ "е" Zhasik Паскаль, Turbo Pascal, PascalABC.NET 3 27.12.2010 10:29
Подсчитать количество букв "А" в предложении и общее количество букв.В тексте из файла несколько строк. kvas91 Общие вопросы C/C++ 3 14.11.2010 16:51
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04