Другие языки программирования и технологии
Помогите составить задачу в Pascal
Трамвайный билет имеет шестизначный номер. Выяснить, количество «счастливых» билетов. Билет назовем «счастливым», если сумма первых трех цифр равна сумме последних трех цифр. Примечание. Так как шестизначное число больше 32767(тип Integer), необходимо номер билета определит как тип Longint( до 10 знаков).
Доброго времени суток.
Вот более изящное решение
var
j, k, l, m : Word;
A : array [0..27] of Integer; {27 потому что максимальная сумма трех цифр 27, т. е. 9+9+9}
begin
ClrScr;
Writeln ('счастливый билет');
for j:=1 to 27 do A[j]:=0;
for j:=0 to 9 do
for k:=0 to 9 do
for l:=0 to 9 do
A[j+k+l] := A[j+k+l] + 1;
m := 0;
for j:=0 to 27 do
m := m + A[j]*A[j];
WriteLn(m);
ReadLn; {это чтобы увидеть результат}
end.
А если требуется все-таки "лобовое", то можно так
m := 0;
for k:=0 to 999999 do begin
Str(k, SS);
SS := Copy('000000', 1, 6 - Length(SS)) + SS; {дополняем слева нулями при необходимости}
if (Ord(SS[1])-48+Ord(SS[2])-48+Ord(SS[3])-48) = (Ord(SS[4])-48+Ord(SS[5])-48+Ord(SS[6])-48) then
Inc(m);
end;
Остальное сами.
Удачи!
Вот более изящное решение
var
j, k, l, m : Word;
A : array [0..27] of Integer; {27 потому что максимальная сумма трех цифр 27, т. е. 9+9+9}
begin
ClrScr;
Writeln ('счастливый билет');
for j:=1 to 27 do A[j]:=0;
for j:=0 to 9 do
for k:=0 to 9 do
for l:=0 to 9 do
A[j+k+l] := A[j+k+l] + 1;
m := 0;
for j:=0 to 27 do
m := m + A[j]*A[j];
WriteLn(m);
ReadLn; {это чтобы увидеть результат}
end.
А если требуется все-таки "лобовое", то можно так
m := 0;
for k:=0 to 999999 do begin
Str(k, SS);
SS := Copy('000000', 1, 6 - Length(SS)) + SS; {дополняем слева нулями при необходимости}
if (Ord(SS[1])-48+Ord(SS[2])-48+Ord(SS[3])-48) = (Ord(SS[4])-48+Ord(SS[5])-48+Ord(SS[6])-48) then
Inc(m);
end;
Остальное сами.
Удачи!
Саша Кузьмин
я немного дополню вас....во второй программе лучше начать цикл со ста тысяч что приведет к боле быстрому выведению результата
ну ты нуб, это же элементарно. Я такие задачки в 5 классе решал. Сам думай))
ммм) ну я бы сделал влоб:
цикл который от 0 до 999999 гоняет число и смотрит сумму цифр (123+456)
реализуется так:
число как сумма будет склабываться поразрядно: т. е. число 123456=1*100000+2*10000+3*1000+4*100+5*10+6
соответственно 123456 это переменные, сумму котоых мы смотрим и при равенстве увеличиваем счетчик
цикл который от 0 до 999999 гоняет число и смотрит сумму цифр (123+456)
реализуется так:
число как сумма будет склабываться поразрядно: т. е. число 123456=1*100000+2*10000+3*1000+4*100+5*10+6
соответственно 123456 это переменные, сумму котоых мы смотрим и при равенстве увеличиваем счетчик
var i1, i2: byte;
kol : integer;
//Возвращает сумму цифр числа
function Sum(a : integer):integer;
var s, m, n : integer;
begin
n := a;
s := 0;
while n > 10 do begin
m := n mod 10;
n := Trunc((n - m)/10);
s := S + m;
end;
S := S + n;
sum := s;
end;
BEGIN
kol := 0;
for i1 := 0 to 999 do
for i2 := 0 to 999 do
if Sum(i1) = Sum(i2) then begin
inc(kol);
end;
writeln('Количество счастливых билетов ',kol-1); //исключаем комбинацию 000000
END.
kol : integer;
//Возвращает сумму цифр числа
function Sum(a : integer):integer;
var s, m, n : integer;
begin
n := a;
s := 0;
while n > 10 do begin
m := n mod 10;
n := Trunc((n - m)/10);
s := S + m;
end;
S := S + n;
sum := s;
end;
BEGIN
kol := 0;
for i1 := 0 to 999 do
for i2 := 0 to 999 do
if Sum(i1) = Sum(i2) then begin
inc(kol);
end;
writeln('Количество счастливых билетов ',kol-1); //исключаем комбинацию 000000
END.
Похожие вопросы
- Помогите составить задачу на Pascal или С++
- помогите с задачей по Pascal abc!!!
- Помогите составить задачу в Delphi
- Помогите написать задачу в Pascal.
- Помогите составить кодпрограммы на pascal
- Помогите составить программу на pascal
- Помогите решить задачу в Pascal!
- Помогите с задачей на Pascal ABC
- Помогите написать задачу на Pascal 7.0
- Помогите решить задачи на Pascal...