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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] программа подсчета счастливых билетов 
V
    Опции темы
nikita234
Дата 4.6.2013, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2013

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



помогите пожалуйста исправить ошибки в коде 
Код

const
  MaxN = 5;
 
var
  A : array [1 .. MaxN,0 .. 9*MaxN] of Longint;
 
function Din_Example_2(N : Integer) : Longint;
var
  I,J,K : Integer;
  Res : Longint;
begin
  fillchar(A,sizeof(A),0);
  for I:=0 to 9 do
    A[1,I]:=1;
  for I:=2 to N do
    for J:=0 to 9*I do
      for K:=0 to 9 do
        if J>=K then
          A[I,J] := A[I,J] + A[I-1,J-K];
  Res := 0;
  for K:=0 to N*9 do
    Res := Res+A[N,K]*A[N,K];
  Din_Example_2 := Res;
end;



не определяет fillchar
Рассмотрим все последовательности десятичных цифр четной длины (будем называть их номерами). Назовем номер счастливым, если сумма цифр в первой половине этого номера совпадает с суммой цифр во второй половине. Требуется определить количество счастливых номеров длины 2N.

или может будут другие варианты этого задания, очень прошу
PM MAIL   Вверх
Poseidon
Дата 5.6.2013, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 5
Всего: 133



Цитата(nikita234 @  4.6.2013,  21:41 Найти цитируемый пост)
Рассмотрим все последовательности десятичных цифр четной длины (будем называть их номерами). Назовем номер счастливым, если сумма цифр в первой половине этого номера совпадает с суммой цифр во второй половине. Требуется определить количество счастливых номеров длины 2N.

Код

function Power10(Exponent: Word): LongWord; // Возведение 10 в степень
begin
  Result:= Trunc(Exp(Exponent*Ln(10)));
end;

function SumDigit(N: integer): integer; // Сумма цифр в числе N
begin
  Result:= 0;
  while N <> 0 do
  begin
    Result:= Result + N mod 10;
    N:= N div 10;
  end;
end;

function Din_Example_2(N: Word): LongWord;
var
  i: LongWord;
  FirstHalf, SecondHalf: Integer;
begin
  Result:= 0;
  if N = 0 then Exit;

  for i:= Power10(N*2-1) to Power10(N*2)-1 do
  begin
    FirstHalf:=  StrToInt(Copy(IntToStr(i), 1, N)); // Первая половина номера
    SecondHalf:= StrToInt(Copy(IntToStr(i), N+1, N*2)); // Вторая половина номера

    if SumDigit(FirstHalf) = SumDigit(SecondHalf) then Inc(Result);
  end;
end;


Цитата(nikita234 @  4.6.2013,  21:41 Найти цитируемый пост)
не определяет fillchar
На кой тебе тут fillchar понадобился я ума не приложу.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
nikita234
Дата 5.6.2013, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2013

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



блин в Pascal ABC не идет
в каком надо, я просто вообще не понимаю???(
у меня win8

Это сообщение отредактировал(а) nikita234 - 5.6.2013, 10:23
PM MAIL   Вверх
Poseidon
Дата 5.6.2013, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 5
Всего: 133



Цитата(nikita234 @  5.6.2013,  10:15 Найти цитируемый пост)
блин в Pascal ABC не идет
в каком надо, я просто вообще не понимаю???(

Писалось на Delphi. Если у тебя чистый паскаль, то смотри на что ругается и меняй на паскалевский аналог.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
nikita234
Дата 5.6.2013, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2013

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



Poseidon, может вы мне поможете не за бесплатно, я просто вообще не понимаю pascal(не обязательно  паскаль можно и на любом другом языке) а мне надо полностью программу чтобы работала и объяснить
PM MAIL   Вверх
ФедосеевПавел
Дата 5.6.2013, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

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



Вот из книги
Код

Порублев, И.Н., Ставровский, А.Б.
Алгоритмы и программы. Решение олимпиадных задач.
- М. Ж ООО "И.Д. Вильямс", 2007.-480 с.:ил.
ISBN 978-5-8459-1244-2(рус.)


Код
{
Задача 10.3

  В гооде Глупове общепринята p-ричная система счисления (вместо
десятичной), а номера троллейбусных билетов состоят из 2k разрядов
(каждый разряд - одна  p-ричная цифра). Билет считается счастливым,
если сумма первых k разрядов равна сумме последних k разрядов.
  Вход. Значения p и k.
  Выход. Количество счастливых билетов.

  Примеры.
  Вход: 2 2; выход: 6.
  Вход: 10 3; выход: 55252.

}

PROGRAM L_10_01;
VAR
  N     : array [0..1] of array [0..5000] of QWord;
  N_tot : QWord;
  s,
  s_,
  k,
  k_,
  p     : Integer;
BEGIN
{$ifndef Debug}
  Write('Enter p, k > ');
  ReadLn(p, k);
{$else}
  p:=10;
  k:=3;
{$endif}
  for s_:=0 to p-1 do
    N[0][s_]:=1;
  for k_:=2 to k do begin
    for s:=0 to k_*(p-1) do begin
      N[1][s]:=0;
      for s_:=0 to p-1 do
        if (s-s_>=0) AND (s-s_<=(k_-1)*(p-1))
          then N[1][s]:=N[1][s]+N[0][s-s_];
    end;
    N[0]:=N[1];
  end;
  N_tot:=0;
  for s:=0 to k*(p-1) do
    N_tot:=N_tot+sqr(N[0][s]);
  WriteLn(N_tot);
END.


Идея в следующем.
Найдём количества чисел разрядностью k, суммы которых равны 0, 1, 2, ... k*(p-1). Очевидно, что количество комбинаций для суммы цифр равной, предположим 5, равна квдрату количества чисел, чья сумма цифр равна 5. Суммируя квадраты получим итоговое количество "счастливых" билетиков.

Для случая 2k=6 и p=10 упрощённый вариант решения (без описания переменных - только алгоритм)
Код

var
  a: array [0..27] of integer;
begin
  {инициализация массива нулями}
  for i:=0 to 27 do
    a[i]:=0;
  {в итоге в a[i] будет количество чисел, чья сумма равна i}
  for i1:=0 to 9 do
    for i2:=0 to 9 do
      for i3:=0 to 9 do
        inc(a[i1+i2+i3]);
  {подсчёт "счастливых" билетиков}
  s:=0;
  for i:=0 to 27 do
    s:=s+a[i]*a[i];
  WriteLn(s);
end.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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