Задание №8

Задание № 8

Тема: Знание основных понятий и методов, используемых при измерении количества информации. Время выполнения 4 минуты.

ЕГЭ-2023

Задание 8 ЕГЭ-2023. Демо

Определите количество пятизначных чисел, записанных в восьмеричной системе счисления, в записи которых только одна цифра 6, при этом никакая нечётная цифра не стоит рядом с цифрой 6.

Решение задания № 8 ЕГЭ-2023. Демо

Ответ: 2961

Пример реализации программы

я.п.Python:

alf='01234567'

al0='1234567'

def f(st):

          for i in range(6):

                   if st[i]=='6' and i==0:

                           if int(st[i+1])%2!=0: return False

                   elif st[i]=='6' and i ==5:

                           if int(st[i-1])%2!=0: return False

                   elif int(st[i+1])%2!=0 or int(st[i-1])%2!=0: return False

                   else:

                           return True

cnt=0                                        

for x in al0:

    for y in alf:

        for z in alf:

            for w in alf:

                for t in alf:

                    sl=x + y + z + w + t

                    if sl.count('6')==1 and f(sl):

                            cnt +=1

print(cnt)

я.п.C/C++

#include <bits/stdc++.h>

using namespace std;

int nchet(int x){

    if(x%2==1)

        return true;

}

int ff(int r){

      string st;

      st=to_string(r);

      char ch='6';

      int count=std::count(st.begin(),st.end(),ch);

      return count;

}

}

int f(int r){

     string st;

     st=to_string(r);

     for(int i =0;i<st.length();i++){

        if(st[0]=='6' && i==0)

            if(nchet(st[i+1]))

                    return false;

        if(st[4]=='6' && i==4)

            if(nchet(st[i-1]))

                    return false;

        if(st[i]=='6')

            if(nchet(st[i-1])|| nchet(st[i+1]))

                    return false;

     }

    return true;

    }

int main()

{

    int n, cnt=0,nb=0;

    set <int> alf={0,1,2,3,4,5,6,7};

    set <int> al0={1,2,3,4,5,6,7};

    for(int i : al0)

        for(int j : alf)

            for(int h : alf)

                for(int k : alf)

                    for(int m : alf){

                        n=i*10000+j*1000+h*100+k*10+m;

                        nb=ff(n);

                        if(nb==1 && f(n))

                            cnt +=1;

                    }

    cout<<cnt<<endl;

    return 0;

}

я.п. PascalABC.net

uses school;

begin

  var kf:='01234567';

  var kf0:='1234567';

  var n_ch:='1357';

  var cnt:=0;

  foreach var i in kf0 do

    foreach var j in kf do

      foreach var h in kf do

        foreach var x in kf do

          foreach var y in kf do

          begin

            var sl:=i + j + h + x + y;

            if sl.Count(x->x='6')=1 then

            begin

              var ind:=sl.IndexOf('6') + 1;   //ind надо увеличивать на +1!

              if (ind=1) and (sl[ind+1] not in n_ch) then

                cnt +=1;

              if (ind=5) and (sl[ind-1] not in n_ch) then

                cnt +=1

              else

                if (ind>1) and (ind<5) and (sl[ind-1] not in n_ch) and (sl[ind+1] not in n_ch) then

                  cnt +=1;  

            end;

          end;

 println(cnt);         

end.

я.п. Python (2 способ)

from itertools import product   

cnt=0

alf='12345670'

for i in product(alf,repeat=5):

    sl=''

    for j in i:

        sl +=j  # составление слова

    if sl.count('6')==1 and sl[0]!='0':

        ind=sl.find('6')

        if ind==0 and sl[ind+1] not in '1357': cnt +=1

        elif ind==4 and sl[ind-1] not in '1357': cnt +=1

        elif sl[ind-1] not in '1357' and sl[ind+1] not in '1357':

             cnt +=1

print(cnt)

ЕГЭ-2024

Задание 8 ЕГЭ-2024. Демо.

Сколько существует восьмеричных пятизначных чисел, не содержащих в своей записи цифру 1, в которых все цифры различны и никакие две чётные или две нечётные цифры не стоят рядом?

Ответ: 180

решение

я.п. Python

from itertools import product   

cnt=0

alf='2345670'

rez0=[1,2,1,2,1]

rez1=[2,1,2,1,2]

for i in product(alf,repeat=5):

    sl=''

    for j in i:

        sl +=j  # составление слова

    s_b=[] #проверка на различные символы в sl

    for q in range(len(sl)):

        if sl[q] not in s_b and sl[0]!='0':

            s_b.append(sl[q])

    if len(s_b)==5:

        sp=[]   # составление шаблонов слов 

        for q in range(len(sl)):

            if int(sl[q])%2==0:

                sp.append(2)

            elif int(sl[q])%2!=0:

                sp.append(1)        

        if sp==rez0 or sp==rez1: # проверка на совпадение шаблонов

            cnt +=1

print(cnt)


я.п. Python (2 способ)

from itertools import product

alf='2345670'

rez1=[1,2,1,2,1]

rez0=[2,1,2,1,2]

cnt=0

for i in product(alf,repeat=5):

    sl='';sp=[]

    for j in i:

        sl +=j

        if j not in sp:

            sp.append(j)

    if len(sl)==len(sp) and sl[0]!='0':

        rez=[]

        for q in range(len(sl)):

            if int(sl[q])%2==0:

                rez.append(2)

            elif int(sl[q])%2!=0:

                rez.append(1)

        if rez==rez0 or rez==rez1:

            cnt +=1

print(cnt)

я.п.PascalABC.net 

//один из способов решения

uses school;

begin

  var kf:='01234567';

  var kf0:='234567';

  var cnt:=0;

  foreach var a in kf0 do

    foreach var b in kf do

      foreach var c in kf do

        foreach var d in kf do

          foreach var e in kf do

          begin

            var sl:=a + b + c + d + e;

            var sp:=Lst(a);

            var p:=1;

              if sl.Count(x->x='1')=0 then

              begin

               for var q:=2 to sl.Length do

                 if sl[q] not in sp then

                  sp.Add(sl[q])

                 else 

                  break;  

              if sp.Count=5 then

              begin

               for var q:=1 to sp.Count-1 do

                if ((sp[q] in '0246') and (sp[q-1] in '357')) or

              ((sp[q] in '357') and (sp[q-1] in '0246')) then 

                      p +=1;

               if p=5 then

                  cnt +=1;

              end;

              end;

            end;  

  println(cnt);          

end.

я.п.C/C++

#include <bits/stdc++.h>


using namespace std;


int main()

{

    int n, cnt=0;

    set <int> kf={0,2,3,4,5,6,7};

    set <int> kf0={2,3,4,5,6,7};

    set <int>::iterator ik;

    string rez0="12121",rez1="21212"; //шаблоны

    string chet="0246";

    string n_chet="357";

    for(int i: kf0)

      for(int j: kf)

        for(int h: kf)

          for(int x: kf)

            for(int y: kf){

               n=i*10000 + j*1000 + h*100 + x*10 + y;

               string sl=to_string(n);

               set <int> mn={i,j,h,x,y};

               if (mn.size()==5){

                string rez="";

               for(int q=0;q<sl.size();q++){

                    if (chet.find(sl[q])!=std::string::npos)

                        rez +="2";

                    else

                    if(n_chet.find(sl[q])!=std::string::npos)

                        rez +="1";

               }

               if (rez==rez0 || rez==rez1){

                    cnt +=1;

               }

             }

            }

    cout<<cnt<<endl;

    return 0;

}

Задание №8 второй тип.

Задание 8 - пример 1

Все четырёхбуквенные слова, составленные из букв Б, В, Г, Д, записаны в алфавитном порядке и пронумерованы. Вот начало списка:

1. ББББ

2. БББВ

3. БББГ

4. БББД

5. ББВБ

Запишите слово, стоящее на 244-м месте от начала списка.

Данную задачу можно решать и без среды программирования. Заменим символы цифрами по следующему правилу:

Б - 0

В - 1

Г - 2

Д - 3

В следствие чего наши данные будут выглядеть так:

То есть, наша таблица превращается в упорядоченный ряд чисел четырехричной системы счисления, где каждое число пронумеровано. Обратим внимание на тот факт, что число 0 имеет порядковый номер "1", число 1 - номер "2" и т.д. Следовательно, число, расположенное под номером "244" будет иметь значение  243. Переведем его в четырехричную СС: 3303. Вернем символы: ДДБД.

Ответ: ДДБД

Решение задачи я.п.

я.п. Python

kf='БВГД'

cnt=0

for i in kf:

    for j in kf:

        for z in kf:

            for q in kf:

                sl=i+j+z+q

                cnt +=1

                if cnt==244:

                    print(sl)

                    break

я.п. PascalABC.net

uses school;

begin

  var kf:='БВГД';

  var cnt:=0;

  foreach var i in kf do

    foreach var j in kf do

      foreach var h in kf do

        foreach var u in kf do

        begin

        var sl:=i + j + h + u;

        cnt +=1;

        if cnt=244 then begin

          println(sl);

          break

        end;

        end;

end.

Задания № 8 ЕГЭ прежних лет

Задание-8