Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# вопрос интересный / 25 сообщений из 25, страница 1 из 1
22.01.2021, 17:05
    #40038084
pahanitto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
скинули тут приглашалку С# + 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
22.01.2021, 17:18
    #40038089
pahanitto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
смотрю ни у кого мыслей как и у меня нет? или тут все так просто, что и говорить не о чем?)
...
Рейтинг: 0 / 0
22.01.2021, 17:47
    #40038105
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
pahanitto
смотрю ни у кого мыслей как и у меня нет? или тут все так просто, что и говорить не о чем?)

от цикла можно избавиться рекурсией, это тупо, потому, что не известно максимальное значение N и M, но для тупой задачи, допускаю тупое решение.
...
Рейтинг: 0 / 0
22.01.2021, 18:08
    #40038110
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
остается вопрос, как проверить на 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
22.01.2021, 18:33
    #40038126
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
а разве такое запрещается?

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

Как именно перемножить? Циклы запрещены.
Вообще, конечно, задачка чисто как головоломка на подумать, когда нечего делать, интересная, но когда такое дают решать при трудоустройстве, я обычно сразу отказываюсь, и перехожу к следующему варианту. Потому как мне очень трудно представить практическую применимость такого кода, а задания на собеседованиях без привязки к практике - тревожный сигнал.
...
Рейтинг: 0 / 0
23.01.2021, 05:03
    #40038215
Big-Bag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
Код: 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
23.01.2021, 05:22
    #40038218
Big-Bag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
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
23.01.2021, 07:24
    #40038221
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
Сон Веры Павловны
Dima T
Все перемножить и сравнить с нулем.

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

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

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


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

а при чём здесь C# ?
...
Рейтинг: 0 / 0
23.01.2021, 13:23
    #40038251
love_bach
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
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
23.01.2021, 14:54
    #40038279
Сотрудник Главного Управления
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
pahanitto
задачка такая
Это проверка такая. Если вы соглашаетесь решать данную задачку, значит вы такой же ***** как и те, кто её вам предложил.
...
Рейтинг: 0 / 0
23.01.2021, 16:18
    #40038299
L1G
L1G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
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
23.01.2021, 16:53
    #40038306
L1G
L1G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
не учел отрицательные числа. тогда можно при перемножении (получении res) брать квадраты (умножать 2 раза)
...
Рейтинг: 0 / 0
23.01.2021, 23:17
    #40038347
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
Свой вариант первоначально сделал на 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
24.01.2021, 01:04
    #40038357
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# вопрос интересный
VSVLAD,

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

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

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

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


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

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

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


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


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