• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача о счастливых числах

Стася

Ученик
Регистрация
3 Дек 2013
Сообщения
11
Реакции
0
Баллы
0
Задача о счастливых числах

Вот такая задачка, нужно решить в Паскале

Я начала делать через массивы, но абсолютно не представляю, как найти количество счастливых чисел, с суммой цифр 13. Помогите пожалуйста

Код:
Const n=6;
vect_min = 0;
vect_max = 9;

Var	i, s, s1, s2 : Integer;							
A:Array[1..n] Of Integer;

Begin
Randomize;	
For i:=1 To n Do	
Begin
A[i]:=Random(vect_max-vect_min + 1) + vect_min;
Write(A[i]);
End;

WriteLn;

s1:=A[1]+A[2]+A[3];	
s2:=A[4]+A[5]+A[6];	

If s1=s2 then 
WriteLn('билет "счастливый" :)')else 
WriteLn('увы, билет не счастливый :( ');

End.
 

Вложения

  • 22.webp
    22.webp
    34.6 KB · Просмотры: 67
Как один из вариантов :)
n:=0;
for x:=0 to 9 do
for y:=0 to 9 do
for z:=0 to 9 do
if x+y+z=13 then inc(n);
У меня получилось, что таких чисел всего может быть 75 :)
 
Спасибо)) Сейчас попробую)
 
Лёша, по-моему, в условии не полусумма, а вся сумма должна равняться 13. Нет?
 
Не, сравнивается сумма троек цифр шестизначного числа :)
Если сумма 1,2,3 цифр равна сумме 4,5,6 цифр, то такой билет считается счастливым и незамедлительно съедается на глазах у изумленного контроллера :))
В задании нужно вычислить количество возможных комбинаций троек, в сумме равных 13.

А если общая сумма цифр числа будет равна 13, то такой билет просто не может считаться счастливым, так как не соблюдается принцип равенства суммы троек цифр. Общая сумма цифр числа счастливого билета равна удвоенной сумме одной из троек цифр.
 
Юхуу, вроде все получилось:) еще раз спасибо

Код:
A[2]:=y;
A[1]:=x;
A[3]:=z;

c:=0;
for x:=0 to 9 do
for y:=0 to 9 do
for z:=0 to 9 do
if x+y+z=13 then inc(c);

writeln(c)

75 таких)
 
Ну вы радоваться то не торопитесь, задача решена не полностью, вы еще не реализовали механизм определения счастливого числа, введенного с клавиатуры :)
 
А если общая сумма цифр числа будет равна 13, то такой билет просто не может считаться счастливым
Ох, пардон. Заскок. Конечно, не может - по причине нечетности числа 13.
 
А вот у меня получилось самую малость другое число: 5175. Решал "в лоб":
Код:
Var
 K,N,i:LongInt;
 Sum:Byte;
 B:boolean;

Procedure Lucky(KL:LongInt; var SL:byte; var Lu:boolean);
var
 A:Array[1..6] of byte;
 Q:LongInt;
 p,S1,S2:byte;
begin
 Q:=KL;
 for p:=6 downto 1 do
  begin
   A[p]:=Q mod 10;
   Q:=Q div 10;
  end;
 SL:=A[1]+A[2]+A[3];
 Lu:=(A[1]+A[2]+A[3])=(A[4]+A[5]+A[6]);
end;

Begin
 Repeat
  Write('Number = ');
  Readln(K);
  If (K<100000) or (K>999999) then Writeln('Number must contain 6 digits!');
 Until (K>99999) and (K<1000000);
 Lucky(K,Sum,B);
 Writeln(B);
 N:=0;
 for i:=100000 to 999999 do
  begin
   Lucky(i,Sum,B);
   if B and (Sum=13) then Inc(N);
  end;
 Writeln(N,' numbers');
 Readln
End.
 
Владимир, как??? Там же всего 10*10*10=1000 комбинаций цифр.
Хотя, если вспомнить теорию вероятности...
 
Владимир, как???
Да очень просто!
1. Ограничимся шестизначными числами, т.е. 0 в первой позиции не допускаем. Тогда мы можем найти полное число троек, дающих в сумме 13:
Код:
Var
 N,x,y,z:byte;
Begin
 N:=0;
 for x:=1 to 9 do
  for y:=0 to 9 do
   for z:=0 to 9 do
    if (x+y+z)=13 then Inc(N);
 Writeln(N);
 Readln
End.
Результат: 69.
Но!!! "Счастливым" является число, в котором СУММЫ троек цифр совпадают. Суммы, а не обязательно сами тройки! То есть "счастливой" является комбинация ЛЮБОЙ из 69 торек С ЛЮБОЙ ДРУГОЙ из них же! Вот так. И плюс к тому, в младшей тройке первый 0 допускается, т.е. там их - 75. Отсюда полное число комбинаций есть 69*75=5175. Уф, совпало!
А вообще проще не умствовать и не лезть в дебри комбинаторики, а решить простым перебором.
 
А почему первая цифра не может быть равной 0? как насчет такого варианта 067139? Такие номера часто встречаются, например, в кинотеатрах, как вспомню, так и начинает голова чесаться (мы раньше перед киносеансом в щелбаны играли на цифры в номерах билетов) :)
 
Ну вы радоваться то не торопитесь, задача решена не полностью, вы еще не реализовали механизм определения счастливого числа, введенного с клавиатуры :)
Ну это-то уже не сложно:)

А вот у меня получилось самую малость другое число: 5175.
А вот это уже проблема)
 
Это-то как раз не проблема и вполне объяснимо :)
Если следовать логике Владимира, первая тройка без 0 в начале дает 69 вариантов, вторая тройка даст вычисленные нами 75 комбинаций, в целом по билету будет 69*75=5175 комбинаций. Полное же количество вариантов с 0 в начале первой тройки даст нам 75*75=5625 комбинаций номеров :))
 
А почему первая цифра не может быть равной 0? как насчет такого варианта 067139?
Ну, вообще-то речь в задаче идет о ШЕСТИЗНАЧНЫХ числах, а 067139 вообще-то пятизначное. Но если допустить и такие, то ответ будет 75²=5625.
 
Формально вы правы, но на деле шестизначные номера билетов могут начинаться и с первых трех нулей и против этого ничего не поделаешь :))

Все дело в некорректности формулировки задачи. Следовательно, во всем виноват преподаватель, разработавший этот билет. На том и остановимся :D
 
Формально вы правы, но на деле шестизначные номера билетов могут начинаться и с первых трех нулей и против этого ничего не поделаешь :))
Ха! Так ведь в задаче-то речь вовсе не о билетах, никакие билеты там не фигурируют, а именно о ШЕСТИЗНАЧНЫХ ЧИСЛАХ.
 
задача решается тривиально в этом случае :)
var a,b,c,x,y,z,n:integer;
begin
n:=0;
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
for x:=0 to 9 do
for y:=0 to 9 do
for z:=0 to 9 do
if ((x+y+z=13) or (a+b+c=13)) and (a+b+c=x+y+z) then inc(n);
writeln('n=',n);
readln
end.
 
Последнее редактирование:
Назад
Сверху