Реализации алгоритмов/Подсчёт счастливых билетов: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 61: Строка 61:
end.
end.
</source>
</source>

[[Категория:Программирование]]

Версия от 15:58, 27 января 2012

Основная статья: w:Счастливый билет

C++

#include<fstream.h>
#include<process.h>
void main()
{
 ofstream out;
 out.open("LuckyTicket.txt",ios::out);
 int i1,i2,i3,i4,i5,i6,count=0;
 for(i1=0;i1<10;i1++)
  for(i2=0;i2<10;i2++)
   for(i3=0;i3<10;i3++)
    for(i4=0;i4<10;i4++)
     for(i5=0;i5<10;i5++)
      for(i6=0;i6<10;i6++)
       if(i1+i2+i3==i4+i5+i6)
       {
        out<<i1<<i2<<i3<<" "<<i4<<i5<<i6<<"\n";
        count++;
       }
 out<<"Number of lucky tickets is "<<count<<endl;
 out.close();
}

Ruby

n = 2 # 2n — кол-во цифр в билете
a = Array.new(n*9 + 1, 0)
 
('0'*n..'9'*n).each do |s| 
  sum = 0
  s.each_byte {|c| sum += c - 48 }
  a[sum] += 1
end
 
count = a.inject {|x, sum| x + sum**2 }
 
puts "Number of lucky tickets: #{count}"

Pascal

Program bilet;
Var s,a,b,v,z,i:integer; {s-количество счастливых билетов, a-сумма последних трех чисел, b-сумма последних трех чисел}
Begin
s:=1; {учитываем билет с номером 000000}
for i:=1 to 999999 do {перебираем билеты от 000001 до 999999}
begin
   v:=i;
   z:=0;
   while z<3 do  begin z:=z+1; a:=v mod 10 +a; v:=v div 10 end; {считаем сумму последних трех чисел}
   while z<6 do  begin z:=z+1; b:=v mod 10 +b; v:=v div 10 end; {считаем сумму первых трех чисел}
   if a=b then s:=s+1;
   a:=0;
   b:=0;
end;
writeln(s);
end.