powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# вопрос интересный
25 сообщений из 25, страница 1 из 1
C# вопрос интересный
    #40038084
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скинули тут приглашалку С# + MSSQL... если со вторым проблем нет то вот с 1 я в тупичке. (да и не пойду я туда- не хватает знаний С) но интересно для себя.

задачка такая
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Имеется массив целых чисел длины N и число M <= N. (Массив и входные параметры могут быть прописаны в коде, не надо делать ввод)

Написать код, который проверяет, что среди первых M элементов нет нуля.

Надо просто вывести Yes или No

Ограничения.

1. Нельзя использовать логические операторы и операторы сравнения (==, <, >, !=, <=, >=)

2. Нельзя использовать циклы.

3. Нельзя использовать операторы ветвления: switch, if, ?:, ассемблерные вставки.

4. Нельзя использовать библиотечные функции кроме как для вывода результата (Абсолютно все Linq и тд нельзя, кроме Console.WriteLine() )

5. Нельзя использовать goto, longjmp, исключения (если есть в языке).

Решить консольным приложением на C#, 


мыысли были привязаться к структуре записи самого числа в памяти..... но как это все ссумировать и найти 0 пока не понял
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038089
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смотрю ни у кого мыслей как и у меня нет? или тут все так просто, что и говорить не о чем?)
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038105
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pahanitto
смотрю ни у кого мыслей как и у меня нет? или тут все так просто, что и говорить не о чем?)

от цикла можно избавиться рекурсией, это тупо, потому, что не известно максимальное значение N и M, но для тупой задачи, допускаю тупое решение.
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038110
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
остается вопрос, как проверить на 0
все переменные в стеке одной длинны, по этому значение текущей ячейки можно скастить bool (вроде длинна типов одинаковая в том числе)
Сделать такое, можно только в Unsafe
var intValue = 10432;
bool boolValue = *(bool*)&intValue;
в результате, если число intValue не равно 0, мы получаем true, А если равно 0, получаем False.
Именно так работает C# тип Boolean;
эта проверка должна возвращаться в результатах рекурсивного метода и след рекурсивный вызов должен быть только когда мы получаем true (0 не найден)
используя оператор && (в списке запрещенных он не значится)
где то примерно так
оператор && и || можно управлять цепочкой вызовов, В зависимости от того что вернет левый операнд True или False)
Результат выполнения 1 операнда, определяет будет ли выполняться второй
( если первый вызов вернул Да && Тогда выполняется 2 операнд)
( если первый вызов вернул Нет && Тогда 2 операнд выполнен не будет)
( если первый операнд вернул да || Тогда 2 операнд выполнен не будет)
( если первый вызов вернул Нет || Тогда выполняется 2 операнд)
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038126
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а разве такое запрещается?

Код: c#
1.
int.Equals(0)
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038166
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что нибудь потяжелее но всё-таки довольно производительное из Linq + Intersect (или Join или Exists) не предлагать?
Т.е. фактически тот-же SQL получится только на C#
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038168
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все перемножить и сравнить с нулем.
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038170
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, 4й пункт не прочитал...
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038213
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Все перемножить и сравнить с нулем.

Как именно перемножить? Циклы запрещены.
Вообще, конечно, задачка чисто как головоломка на подумать, когда нечего делать, интересная, но когда такое дают решать при трудоустройстве, я обычно сразу отказываюсь, и перехожу к следующему варианту. Потому как мне очень трудно представить практическую применимость такого кода, а задания на собеседованиях без привязки к практике - тревожный сигнал.
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038215
Big-Bag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public static string Check(int[] array, int range)
        {
            try
            {
                int b = array[range - 1] / array[range - 1];
            }

            catch (DivideByZeroException)
            {
                return "YES";
            }

            catch (IndexOutOfRangeException)
            {
                return "NO";
            }                
                
            return Check(array, range - 1);           

        }
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038218
Big-Bag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Big-Bag
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public static string Check(int[] array, int range)
        {
            try
            {
                int b = array[range - 1] / array[range - 1];
            }

            catch (DivideByZeroException)
            {
                return "YES";
            }

            catch (IndexOutOfRangeException)
            {
                return "NO";
            }                
                
            return Check(array, range - 1);           

        }


Ну вот, сам неправильно прочитал условия, что эксепшны нельзя использовать.
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038221
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Dima T
Все перемножить и сравнить с нулем.

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

Упрощаем: как прочитать первые M элементов массива без цикла ? Да никак.
Но читаем внимательно ТЗ
pahanitto
(Массив и входные параметры могут быть прописаны в коде, не надо делать ввод)

т.е. M известно до запуска, поэтому
Код: c#
1.
var res = arr[0] * arr[1] * ... arr[M-1];


а вот дальше засада: как вывести Yes или No без использования "switch, if, ?" ?
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038227
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pahanitto
Код: plaintext
goto, longjmp

а при чём здесь C# ?
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038251
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pahanitto
скинули тут приглашалку С# + MSSQL... если со вторым проблем нет то вот с 1 я в тупичке. (да и не пойду я туда- не хватает знаний С) но интересно для себя.

задачка такая
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Имеется массив целых чисел длины N и число M <= N. (Массив и входные параметры могут быть прописаны в коде, не надо делать ввод)

Написать код, который проверяет, что среди первых M элементов нет нуля.

Надо просто вывести Yes или No

Ограничения.

1. Нельзя использовать логические операторы и операторы сравнения (==, <, >, !=, <=, >=)

2. Нельзя использовать циклы.

3. Нельзя использовать операторы ветвления: switch, if, ?:, ассемблерные вставки.

4. Нельзя использовать библиотечные функции кроме как для вывода результата (Абсолютно все Linq и тд нельзя, кроме Console.WriteLine() )

5. Нельзя использовать goto, longjmp, исключения (если есть в языке).

Решить консольным приложением на C#, 


мыысли были привязаться к структуре записи самого числа в памяти..... но как это все ссумировать и найти 0 пока не понял

Рекурсия + таблица решений с делагатами.
И слать таких работодателей
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038279
Сотрудник Главного Управления
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pahanitto
задачка такая
Это проверка такая. Если вы соглашаетесь решать данную задачку, значит вы такой же ***** как и те, кто её вам предложил.
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038299
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

а вот дальше засада: как вывести Yes или No без использования "switch, if, ?" ?

Код: c#
1.
2.
3.
var resStr = new string[] { "No", "Yes" };
var resIndex = (res + 2) % (res + 1); // как вариант; может быть, есть более "интуитивно-понятный"
Console.Writeline(resStr[resIndex]);
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038306
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не учел отрицательные числа. тогда можно при перемножении (получении res) брать квадраты (умножать 2 раза)
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038347
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свой вариант первоначально сделал на VB.NET. Работает всё согласно условий задачи.
На C# также завёлся код, но пришлось включить unsafe как писали выше.

CBool оператор в VB не переводится 1 в 1 в шарп вариант, т.к. может использовать сервисы компилятора из своей библиотеки... но если посмотрим честно на C# компилятор, то он также внутри создаёт If-ы для приведения типов и для условий через || и скобки. Будем считать, что условие задачи выполнено. И как всегда, в ж*** таких работодателей

Код: c#
1.
2.
bool StopIfMax = (byte)intStopifMax == 0;
bool StopIfZero = (byte)intStopIfZero == 0;



---
Хотя, если перечитать "Нельзя использовать логические операторы", тогда уже и такой вариант не подходит...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Option Strict On

Public Module Program

    Private StopGlobal As Boolean

    Private N() As Integer = {1, 4, 9, -800, 0, 1, 9, 111111, 9, 9, 9, 5, 6, 8, 9, 1, 2, 3, 1, 5, 6}
    Private M As Integer = 5

    Public Sub Main()
        Dim res = NextIndex(0, M)
        Console.ReadLine()
    End Sub

    Public Function NextIndex(Ind As Integer, MaxInd As Integer) As Boolean
        Dim StopIfMax = Not CBool(MaxInd - Ind)
        Dim StopIfZero = Not CBool(N(Ind))

        Return (Not StopGlobal) AndAlso ((StopIfZero AndAlso ShowYes()) OrElse ((StopIfMax And Not StopIfZero) AndAlso ShowNo()) OrElse (Not StopIfMax AndAlso NextIndex(Ind + 1, MaxInd)))
    End Function

    Public Function ShowYes() As Boolean
        StopGlobal = True
        Console.WriteLine("Yes")
        Return False
    End Function

    Public Function ShowNo() As Boolean
        Console.WriteLine("No")
        Return True
    End Function

End Module



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
using System;

public static class Program {
    private static bool StopGlobal;

    private static int[] N = new int[] { 1, 4, 9, -800, 0, 1, 9, 111111, 9, 9, 9, 5, 6, 8, 9, 1, 2, 3, 1, 5, 6 };
    private static int M = 5;

    public static void Main() {
        var res = NextIndex(0, M);
        Console.ReadLine();
    }

    public static bool NextIndex(int Ind, int MaxInd) {
        bool StopIfMax;
        bool StopIfZero;

        int intStopifMax = MaxInd - Ind;
        int intStopIfZero = N[Ind];

        unsafe {
            StopIfMax = ! *(bool*)&intStopifMax;
            StopIfZero = !*(bool*)&intStopIfZero;
        }
        
        return (!StopGlobal) && ((StopIfZero && ShowYes()) || ((StopIfMax & !StopIfZero) && ShowNo()) || (!StopIfMax && NextIndex(Ind + 1, MaxInd)));
    }

    public static bool ShowYes() {
        StopGlobal = true;
        Console.WriteLine("Yes");
        return false;
    }

    public static bool ShowNo() {
        Console.WriteLine("No");
        return true;
    }
}
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038357
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,

Ну это практически моя теоретическая реализация ) самому мне её было делать лень, уж извините.
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038502
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый сок. Ищут людей с нестандартным мышлением, чтобы окунуть в поток самых простых, примитивных, но трудоёмких задач "на объём" :)
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038527
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Ищут людей с нестандартным мышлением

Причём с настолько нестандартным, что таких людей даже сложно представить. Задача из разряда "зашнуровать ботинки, не используя руки и помощь другого человека".
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038545
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле рабочее решение, которое выполняет абсолютно все условия, ещё не предоставили. На соседнем форуме увидел реализацию через делегаты. Но если посмотреть на выполнение:

Код: vbnet
1.
2.
Dim func = Function() .....
func() ' здесь неявно выполняется func.Invoke(), а это уже метод платформы, который запрещен по условиям задачи
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038589
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
hVostt
Ищут людей с нестандартным мышлением

Причём с настолько нестандартным, что таких людей даже сложно представить. Задача из разряда "зашнуровать ботинки, не используя руки и помощь другого человека".


Проблема таких задач в том, что они полностью искусственные, т.е. в реальной жизни не применимые. Таких задач в жизни быть никак не может, как озвучено в этом топике.

А мозгов-то не хватает на то, чтобы придумать реальную задачу, которая бы раскрывала потенциал нестандартного мышления.

Представляю как бы они искали шахматиста. Доски нет, фигур нет. Есть размытая фотография соперника. Как поставить мат в три хода?
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40038702
Сотрудник Главного Управления
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если всех всё устраивает, то почему бы и нет?
Топикстартера устраивает неадекватный работодатель.
Работодателя устраивает одарённый сотрудник с нестандартным мышлением...
...
Рейтинг: 0 / 0
C# вопрос интересный
    #40039738
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сотрудник Главного Управления
Топикстартера устраивает неадекватный работодатель.


Постановщик таких задач попросту глупый. При этом он вполне может быть адекватным, а в жизни душкой.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# вопрос интересный
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]