Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Алгоритм определения количества "счастливых" чисел   Найти похожие ветки 

 
V-Isa ©   (2004-03-19 17:19) [0]

"Счастливым" считается число, сумма цифр в котором слева до середины равна сумме цифр справа до середины. Так, 123006 - "счастливое", т.к. 1+2+3=0+0+6, а 12306 - нет, т.к. 1+2<>0+6!
Необходим алгоритм определения количества "счастливых" чисел в заданном диапазоне. Например, необходимо определить сколько таких чисел встречается от 1234 до 56789 и т.п. Обычный перебор не подходит, так как количество разрядов в исходных данных может достигать 20 и более, а это длительный процесс.


 
WebErr ©   (2004-03-19 17:25) [1]

Это олимпиадная задачка по комбинаторике, клёво, что она здесь появилась! Сейчас попробую решить! ... :))))


 
WebErr ©   (2004-03-19 17:26) [2]


>  Обычный перебор не подходит, так как количество разрядов
> в исходных данных может достигать 20 и более, а это длительный
> процесс.

Какой к чертям перебор!!! :))))


 
V-Isa ©   (2004-03-19 17:28) [3]

Вот именно, просто я уже неделю пытаюсь ответ получить, а мне только говорят - попробуйте перебором!


 
WebErr ©   (2004-03-19 17:30) [4]

Эта задачка эквивалентна другой:
сколько пар чисел, одно от А до В, другое от C до D, таких, что сумма цифр одного равна сумме цифр другого...


 
WebErr ©   (2004-03-19 17:32) [5]

<A>acm.timus.ru</A>


 
WebErr ©   (2004-03-19 17:37) [6]

Надо разложить каждую цифру одного числа (из двух) на единицы и посмотреть, сколькими способами можно расставить между единицами n-1 перегородку, где n - количество цифр числа = длина строки div 2 (или shr 1)... Но меня смущают граничные диапазоны... :))))


 
WebErr ©   (2004-03-19 17:38) [7]

Надо разложить каждую цифру одного числа (из двух) на единицы и посмотреть, сколькими способами можно расставить между единицами n-1 перегородку, где n - количество цифр числа = длина строки div 2 (или shr 1)... Но меня смущают граничные диапазоны... :))))


 
WebErr ©   (2004-03-19 17:44) [8]

Например числа от 12345 до 76543210 это можно представить в виде пар чисел от (0012, 0045) до (7654, 3210)... Но может быть и от 12345 до 13000, тогда от (12, 00) до (13, 45) - упорядочиваем поэлементно пары! :))))


 
Goida ©   (2004-03-19 17:44) [9]

Переведи в строку и обрабатывай её. Наилегчайший способ :) Думаю, и рациональный. Это ведь лаба? Не так ли? Если так, то кодить за тебя здесь ни кто не будет.


 
V-Isa ©   (2004-03-19 17:44) [10]

Что значит перегородку. Не могли бы более подробнее? Буду признателен, если ответ вышлете на мыло. Очень надо решение!


 
WebErr ©   (2004-03-19 17:45) [11]

Вот я и подвёл котёнка к молоку!!! Дальше техническая часть - сам попробуй! :))))


 
V-Isa ©   (2004-03-19 17:48) [12]

Это не лаба, просто столкнулся с желанием любимой девушки подсчитать, сколько же...?


 
WebErr ©   (2004-03-19 17:50) [13]


> Что значит перегородку

Это значит, что сумму цифр числа 123 - это 1+2+3 я представляю как 1+1+1+1+1+1 6 раз! Теперь расставляем "перегородки" (1+1+1)+(1+1)+(1) разбивая n-1 перегородкой число на n частей n=3. На мыло код слать не буду - самому тоже надо что-то сделать - это я не про себя... :))))


 
WebErr ©   (2004-03-19 17:56) [14]


> Это не лаба, просто столкнулся с желанием любимой девушки
> подсчитать, сколько же...?

СВЯТОЕ! Ну тогда сам бог велел тебе немного подумать головой! Напрягись ради любимой! :))))


 
V-Isa ©   (2004-03-19 17:56) [15]

А как быть с числами до 10? Забивать вручную?


 
WebErr ©   (2004-03-19 17:57) [16]


> А как быть с числами до 10? Забивать вручную?

???


 
V-Isa ©   (2004-03-19 18:02) [17]

Например, диапазон от 10 до 15... Разбили: (1,0) до (1,5)... и что? Или я чего-то не понял, сбросьте на мыло, а то уже убегаю, заранее огромное спасибо! Мастера Дельфи есть мастера, хоть намекнули, не то, что математики :-) //шутя...


 
Goida ©   (2004-03-19 18:04) [18]

А разве есть что-то, что можно поставить в какое-то соответствие сумму цифр одной части числа другой??? Помоему в математике такого нет. Эта задачька как раз и нужна для того, что тот кто её делает научился выделять значения десятичных разрядов... Решается только перебором. Моим способом гораздо легче.


 
Chcnger   (2004-03-19 18:05) [19]

Решается с помощью динамического программирования.
Разбор етсь тут g6prog.narod.ru

Интересно как найти билеты, если их разряд 2N, где 1<N<50


 
Chcnger   (2004-03-19 18:09) [20]

Мое решение задачи 1044 с acm.timus.ru (про счастливые билеты, решается при помощи дин. программирования)

{1044}
var I,K,RES,N,luck,sum,spec:longint;
   a:array[0..100]of longint;
   s:string;
begin
    res:=0;
    fillchar(a,sizeof(a),0);
    readln(n);
    k:= n div 2;
    s:="";
    for i:=1 to k do S:=s+"9";
    val(s,k,res);
    res:=0;

    for i:=1 to k do
     begin
          sum:=0;
          luck:=i;
         for spec:=1 to n div 2 do
          begin
            Sum:=sum+Luck mod 10;
            Luck:=Luck div 10;
          end;
         inc(a[sum]);
     end;
     for i:=1 to length(s)*9 do
       begin
         res:=res+ a[i]*a[i];
       end;
     Writeln(res+1);
end.


 
WebErr ©   (2004-03-19 18:15) [21]


> Chcnger   (19.03.04 18:09) [20]
> Мое решение задачи 1044 с acm.timus.ru (про счастливые билеты,
> решается при помощи дин. программирования)

О! Точно, №1044! :)))) Если не трудно скинь код ему на мыло! 8*)


 
WebErr ©   (2004-03-19 18:17) [22]


> Интересно как найти билеты, если их разряд 2N, где 1<N<50

А чем случай 2N отличается от 2N+1?! Можно ведь просто выкинуть "лишнюю" среднюю цифру! :))))


 
nikkie ©   (2004-03-19 19:38) [23]

>V-Isa
ты каждый месяц теперь будешь этот вопрос задавать? уже на Валентинов день обсуждали :))



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.04 c
1-1079947978
V-Isa
2004-03-22 12:32
2004.04.11
Hot Key + Selected Text


3-1081770759
Balkon
2004-04-12 15:52
2004.04.11
Массивы в Базе данных.


7-1075725608
Falendysh
2004-02-02 15:40
2004.04.11
Работа с посторонними окнами


6-1075285004
ZioN
2004-01-28 13:16
2004.04.11
Как открывать новые окна моим браузером?


3-1081946364
Rule
2004-04-14 16:39
2004.04.11
Read-only+Firebird1.0+ Delphi 7+ Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский