Помогите переписать код для 2-го задания ЕГЭ из python на C#
Я написал код для решения этой задачи на 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)
Ответы (2 шт):
(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));
}
}
Решение с использованием булевых переменных:
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 соответственно.