Главная страница
Навигация по странице:

  • INPUT.TXT OUTPUT

  • Входные данные.

  • INPUT.TXT OUTPUT.TXT

  • Задача 95 (№ 416) Шахматный конь (Сложность: 25%)

  • INPUT OUTPUT

  • Для начинающих на С. Составители


    Скачать 1.31 Mb.
    НазваниеСоставители
    Анкорisakova-zarina@mail.ru
    Дата18.02.2023
    Размер1.31 Mb.
    Формат файлаdocx
    Имя файлаДля начинающих на С .docx
    ТипЗадача
    #943648
    страница38 из 38
    1   ...   30   31   32   33   34   35   36   37   38

    Задача 89 (№ 315) Наименьшая система счисления (Сл.: 26%)


    Известно, что основанием позиционной системы счисления называют количество различных символов, используемых для записи чисел в данной системе счисления. Также известно, что любое число x в b-ичной системе счисления имеет вид x=a0∙b0+a1∙b1+…+an∙bn, где b ≥ 2 и 0 ≤ ai < b.

    Для записи чисел в b-ичной системе счисления, где b ≤ 36, могут быть использованы первые b символов из следующего списка 0,1,…, 9, A, B, …, Z. Например, для записи чисел в троичной системы используются символы 0, 1, 2, а в двенадцатеричной - 0,1,…, 9, A, B.




    INPUT.TXT

    OUTPUT

    1

    123

    4

    2

    ABCDEF

    16

    3

    AD%AF

    -1
    Требуется написать программу, которая по входной строке S определит, является ли данная строка записью числа в системе счисления, с основанием не большим 36, и, если является, определит минимальное основание этой системы счисления.

    Входные данные. Входной файл содержит входную строку. Длина строки не превышает 255. Все символы имеют коды от 32 до 127.

    Выходные данные. Выходной файл должен содержать одно число. Если строка является записью числа в некоторой системе счисления, то нужно вывести минимальное основание такой системы счисления. Иначе вывести -1.


    #include

    #include

    using namespace std;

    int main(){

    string s;

    getline(cin,s);

    int n=s.length();

    int max=0;

    int w=0;

    for(int i=0;i
    if (s[i]=='0') w++;}

    if(w==n) {cout<<2; return 0;}

    for(int i=0;i
    int k=s[i];

    if ((k<48) || ((k>57) && (k<65)) || (k>90))

    {cout<<"-1"; return 0;}

    if (k>max) max=k;

    }

    if (max<=57) cout<
    else cout<
    return 0; }

    Задача содержит много «подводных камней»:
    1) строка может содержать пробелы, поэтому для чтения используем getline(cin,s);
    2) Нет единичной системы счисления, т.е. если все нули – выводим 2
    Проверка: состоит ли строка только из цифр и заглавных латинских букв? Код чисел (0,1,2,3,..,9) от 48 до 57.

    Код латинских заглавных букв (А,B,C,..Z) от 65 до 90.
    Находим символ с мах кодом.

    Если это число, то отнимаем 47, если буква -57 и получаем основание СС.



    Задача 90 (№ 277) Школьная алгебра (Сложность: 27%)


    Трёхчлен a + bx + сy от двух переменных x и y однозначно определяется коэффициентами a, b и c. Написать программу, которая по заданным a, b и c выводит соответствующий трёхчлен, записанный с использованием алгебраических соглашений:

    • коэффициент при члене, содержащем переменную, опускается, если его модуль равен единице;

    • член, коэффициент при котором равен нулю, опускается (кроме случая, когда все коэффициенты равны нулю, тогда трехчлен состоит из одной цифры 0);

    • знак "+" опускается, если он предшествует отрицательному коэффициенту;

    • знак "+" опускается, если он стоит в начале выражения (так называемый унарный плюс);

    • знак умножения между коэффициентом и переменной опускается.




    INPUT.TXT

    OUTPUT.TXT

    1

    0 2 -1

    2x-y

    2

    3 0 -2

    3-2y
    При этом запрещено менять местами члены.

    Входные данные


    Во входном файле через пробел записаны целые коэффициенты a, b и с, каждое из которых не превосходит 30000 по абсолютной величине.

    Выходные данные


    Выходной файл OUTPUT.TXT должен содержать трехчлен, записанный с использованием алгебраических соглашений.

    #include

    using namespace std;

    int main() {

    int a,b,c;

    cin>>a>>b>>c;

    if(a!=0) cout<
    if(b>1 && a!=0)cout<<"+"<
    if(b>1 && a==0)cout<
    if(b==1 && a!=0)cout<<"+x";

    if(b==1 && a==0)cout<<"x";

    if(b<-1)cout<
    if(b==-1)cout<<"-x";
    if(c>1) {

    if(b==0 && a==0)cout<
    if(b!=0 || a!=0)cout<<"+"<if(c==1){

    if(b==0 && a==0)cout<<"y";

    if(b!=0 || a!=0)cout<<"+y";

    }

    if(c<-1)cout<
    if(c==-1)cout<<"-y";

    if(a==0 && b==0 && c==0)cout<<0; }

    Шахматы


    Задача 91 (№ 935) Шахматное поле (Сложность: 16%)


    На стандартной шахматной доске 8х8 заданы координаты двух клеток. Требуется определить: имеют ли данные клетки одинаковый цвет?




    INPUT.TXT

    OUTPUT.TXT

    1

    1 1 4 4

    YES

    2

    1 2 7 5

    NO
    Входные данные. Входной файл INPUT.TXT содержит целые числа x1, y1, x2, y2, описывающие координаты двух клеток (x1,y1) и (x2,y2). Ограничения: 1 ≤ x1,y1,x2,y2 ≤ 8.

    Выходные данные. В выходной файл OUTPUT.TXT выведите YES, если поля одного цвета, или слово NO в противном случае.

    #include

    using namespace std;

    int main(){

        int x1,y1,x2,y2;

        cin>>x1>>y1>>x2>>y2;

         if((x1+y1+x2+y2)%2==0) cout<<"YES";  else cout<<"NO";

    return 0; }

    Задача 92 (№ 798) Шахматная доска – 2. (Сложность: 18%)


    Аня разделила доску размера m × n на клетки размера 1×1 и раскрасила их в черный и белый цвет в шахматном порядке. Васю заинтересовал вопрос: клеток какого ц вета получилось больше – черного или белого.

    Для того чтобы выяснить это, он спросил у Ани, в какой цвет она раскрасила j-ю клетку в i-м ряду доски. По этой информации Вася попытался определить, клеток какого цвета на доске больше. Требуется написать программу, которая по размерам доски и цвету j-й клетки в i-м ряду определит, клеток какого цвета на доске больше — черного или белого.




    INPUT.TXT

    OUTPUT.TXT

    1

    3 5 1 1 0

    black

    2

    3 5 2 1 0

    white

    3

    4 4 1 1 1

    equal
    Входные данные. Входной файл INPUT.TXT содержит пять целых чисел: m, n, i, j и c (1 ≤ m, n ≤ 109, 1 ≤ i ≤ m, 1 ≤ j ≤ n, с = 0 или с = 1). Значение c = 0 означает, что j-я клетка в i-м ряду доски раскрашена в черный цвет, а значение c = 1 – в белый цвет.

    Выходные данные. В выходной файл OUTPUT.TXT выведите одно из трех слов:

    black, если черных клеток на доске больше,

    white, если белых клеток на доске больше,

    equal, если черных и белых клеток на доске поровну.
    #include

    using namespace std;

    int main(){

    int m,n,j,i,c;

    cin>>m>>n>>j>>i>>c;

    if (m%2==0||n%2==0){cout<<"equal"; return 0; }

    if (c==0){if ((j+i)%2==0) cout<<"black"; else cout<<"white"; }

    if (c==1){if ((j+i)%2!=0) cout<<"black"; else cout<<"white"; }

    return 0; }

    Задача 93 (№ 763) Игра с ладьей (Сложность: 19%)


    На бесконечной вправо и вверх шахматной доске находится ладья. Два игрока передвигают ее по очереди. За один ход разрешено сдвинуть ладью вниз или влево на произвольное (ненулевое) количество клеток так, чтобы ладья не покинула доску. Цель игры – переместить ладью в левый нижний угол, то есть клетку с координатами (1,1). Известно, что оба игрока придерживаются оптимальной стратегии. Игрок №1 ходит первым, при этом он обязан совершить хотя бы один ход. Если первый ход сделать нельзя, то определить победителя также невозможно. Требуется написать программу, которая найдет номер победившего игрока, либо определит, что этого сделать нельзя.




    INPUT.TXT

    OUTPUT.TXT

    1

    1 1

    0

    2

    1 6

    1
    Входные данные. Входной файл INPUT.TXT содержит два натуральных числа, разделенных пробелами: X и Y – координаты ладьи перед первым ходом (X,Y ≤ 109).

    Выходные данные. В выходной файл OUTPUT.TXT выведите одно число – номер победившего игрока. Если победителя определить невозможно, то следует вывести 0.
    #include

    using namespace std;

    int main(){

        int x,y;

        cin>>x>>y;

        if(x==1 && y==1){cout<<"0"; return 0;}

         if (x==1 || y==1) cout<<"1";

            else if(x!=y) cout<<"1"; else cout<<"2";

        return 0;}


    Задача 94 (№791) Соседние клетки. (Сложность: 22%)

    INPUT

    OUTPUT

    1

    2

    1 3 10

    2

    64

    56 63

    Клетки шахматной доски пронумерованы числами от 1 до 64 по строкам слева направо и снизу вверх. Напишите программу, которая по заданному номеру клетки определяет номера всех клеток, имеющих с ней общую сторону.

    Входные данные. Входной файл INPUT.TXT содержит одно целое число от 1 до 64.

    Выходные данные. В выходной файл выведите через пробел в порядке возрастания номера всех клеток, имеющих с заданной общую сторону.



    #include

    using namespace std;

    int main(){

        int cell,a;

        cin>>cell;

           

        a=cell-8;

        if(a>0) cout<
          

        a=cell-1;

        if(a>0 && a%8!=0) cout<
           

        a=cell+1;

        if(a<65 && cell%8!=0) cout<
          

        a=cell+8;

        if(a<65) cout<
        return 0; }
    Задача 95 (№ 416) Шахматный конь (Сложность: 25%)

    Вася решил научиться играть в шахматы. Он нашел книгу с записями партий и внимательно их изучает. Может быть, когда-нибудь Вася станет великим шахматистом, но пока он еще учится в начальной школе, и ему нелегко дается шахматная нотация. Больше всего трудностей у Васи вызывают ходы шахматного коня. Он попросил вас написать программу, которая сможет сообщить Васе, на какие клетки можно пойти конем с заданной клетки.




    INPUT

    OUTPUT

    1

    e2

    c1
    c3
    d4
    f4
    g1
    g3

    2

    a1

    b3
    c2
    Вы, наверное, тоже знаете, что конь в шахматах всегда перемещается либо на две клетки по горизонтали и на одну по вертикали, либо на одну по горизонтали и на две по вертикали. Вертикали обозначаются маленькими латинскими буквами от a до h, а горизонтали - цифрами от 1 до 8. Любая клетка на шахматной доске обозначается буквой соответствующей вертикали и цифрой соответствующей горизонтали, например, c6 или e2.

    Входные данные. Во входном файле записано 2 символа – координаты клетки, где стоит конь.

    Выходные данные. В выходной файл в произвольном порядке выведите все координаты клеток, на которые за один ход может попасть конь, находящийся на заданной клетке.




    Нужно проверять, чтобы конь не уходил с доски.




    У коня 8 возможных ходов:




    i-1,

    х+2




    i+1,

    х+2




    i-2,

    х+1










    i+2,

    х+1







    i,х







    i-2,

    х-1










    i+2,

    х-1




    i-1,

    х+2




    i+1,

    х-2





    #include

    # include

    using namespace std;

    int main (){

    char n, x; string d;

    cin>>n>>x;

    x=x-48; // переводим символ в число

    d="_abcdefgh";
    for (int i = 1; i <= 8; i++ ) {

    if (n==d[i]) {


    i - номер буквы в строке d:='_abcdefgh'

    В строке нумерация идет с 0, поэтому для удобства дописываем любой знак в начале строки
    if (i!=8 && x>2) cout<
    if (i<7 && x>1) cout<
    if (i<7 && x!=8) cout<
    if (i!=8 && x<7) cout<
    if (i!=1 && x<7) cout<
    if (i>2 && x!=8) cout<
    if (i>2 && x!=1) cout<
    if (i!=1 && x>2) cout<
    }

    }

    return 0;}
    1   ...   30   31   32   33   34   35   36   37   38


    написать администратору сайта