Помогите переписать код для 2-го задания ЕГЭ из python на C#

Рейтинг: 0Ответов: 2Опубликовано: 11.05.2023

Задача

Я написал код для решения этой задачи на python, теперь хочу переписать его на C#, но в шарпе переменные типа int не могут использоваться вместе с логическими операторами, из-за этого возникает ошибка.

CS0019: Оператор "||" невозможно применить к операнду типа "int" и "int".

Возможно стоит заменить тип переменной цикла на bool, но как оформлять такой цикл? Помогите переписать код.

print("x y z w")  
for x in range (0,2):
    for y in range (0,2):
        for z in range (0,2):
            for w in range (0,2):
                if (((x <= y) and (y <= w)) or (z ==(x or y))) == False:
                    print(x, y, z, w)

Ответы

▲ 3Принят

(x or y) означает что если хотя бы x или y > 0. Вот этот код переписанный на C#:

using System;
class Program {
  static void Main() {
    Console.WriteLine("x y z w");
    for(int x = 0; x < 2; x++)
        for(int y = 0; y < 2; y++)
            for(int z = 0; z < 2; z++)
                for(int w = 0; w < 2; w++)
                    if (!(((x <= y) && (y <= w)) ||
                       ((z > 0 && (x + y) > 0) ||
                       (z == 0 && (x + y) == 0))))
                        Console.WriteLine(String.Format("{0} {1} {2} {3}", x, y, z, w));
  }
}

▲ 0

Решение с использованием булевых переменных:

class Ege
{
    static void Main()
    {
        Console.WriteLine("x y z w");
        Ege e = new Ege();
        bool[] bools = { true, false };
        foreach (bool x in bools)
        {
            foreach (bool y in bools)
            {
                foreach (bool z in bools)
                {
                    foreach (bool w in bools)
                    {
                        if (!(((!x || y) && (!y || w)) || (z == (x || y))))
                        {
                            e.Convert(x, y, z, w);
                        }
                    }
                }
            }
        }
    }
    void Convert(bool x, bool y, bool z, bool w)
    {
        int cx = x ? 1 : 0;
        int cy = y ? 1 : 0;
        int cz = z ? 1 : 0;
        int cw = w ? 1 : 0;
        Console.WriteLine($"{cx} {cy} {cz} {cw}");
    }
}

Здесь вместо (x <= y) используется (!x || y) т.к. булевые переменные не поддерживают арифметические операторы.

Тернарный оператор "?" в методе Convert используется для того чтобы превратить булевые значения True, False в 1 и 0 соответственно.