четвер, 3 вересня 2009 р.

Це вам не цюцьки-пецьки, це вища школа! (с)

В купі унилого гімна нецікавого програмного коду, який мені доводиться щодня писати на роботі, я сьогодні знайшов цікаву задачку на опнимальне рішення якої потратив трохи часу. Суть задачі в наступному: В ряді з натуральних чисел більше нуля треба віднайти елемент наступний після відсутнього елементу.

 
Приклад:
Є ряд 1,2,3,4,5,7,10
Відповідь буде: 6

Задача ніби проста але щоб її вирішити довелося написати аж отакий код:
 
public int FindOperatorNumber()
        {
            try
            {
                System.Data.SqlClient.SqlDataReader ReadDate;
                List<int> OperNumbers = new List<int>();
                ReadDate = Functions.ExecuteQuery("select distinct oper_num from Operators order by oper_num", Functions.CreateConnectionString(Functions.ReadSettingsParam("Main_Server", "Name"), Functions.ReadSettingsParam("Main_Server", "Base"), Functions.ReadSettingsParam("Main_Server", "User"), Functions.ReadSettingsParam("Main_Server", "Password")));
                while (ReadDate.Read())
                {
                    if (Convert.ToInt32(ReadDate["oper_num"].ToString()) > 0)
                    {
                        OperNumbers.Add(Convert.ToInt32(ReadDate["oper_num"].ToString()));
                    }
                }
                Boolean Flag=false;
                int MinNumber = 1;
                int ListCount = OperNumbers.Count;
                while (Flag == false)
                {
                    for (int I = MinNumber-1; (I < ListCount - 1); I++)
                    {
                        if (OperNumbers[I] == MinNumber)
                        {
                            Flag = false;
                            break;
                        }
                        else
                        {
                            Flag = true;
                        }
                    }
                    if (Flag == false)
                    {
                        if (MinNumber != OperNumbers[ListCount - 1])
                        {
                            MinNumber = MinNumber + 1;
                        }
                        else
                        {
                            MinNumber = OperNumbers[ListCount - 1];
                            Flag = true;
                        }
                    }
                    else
                    {
                        if (MinNumber == OperNumbers[ListCount - 1])
                        {
                            MinNumber = ++MinNumber;
                        }
                    }
                }
                return MinNumber;
               
            }
            catch (Exception err)
            {
                Functions.WriteToLog(err.ToString(), "Normal");
                return -1;
            }
        }

14 коментарів:

  1. ну але і задачка не така і складна...

    ВідповістиВидалити
  2. Я ніколи не розуміла нашо шось доказувати і пояснювати якшо все відомо одразу? Хіба не достатньо просто вірний варіант відповіді?

    п.с. Ти так і не відповів на шо образився...

    ВідповістиВидалити
  3. А де я щось доказую і пояснюю?
    А ти перечитай останні свої коменти в моєму ЖЖ і все зрозумієш.

    ВідповістиВидалити
  4. та я не говорю шо ТИ доказуєш, а взагалі не розумію математику і все шо пов"язане з рахуванням.

    І чого дутись? Я ж ніби сказала шо жартую. Якшо це шось допоможе то вибач, я не хотіла образити.

    ВідповістиВидалити
  5. Ти ж казала, що любиш всяких Айтішніків, а любиш їх люби те, що вони люблять.

    Я не дуюсь, просто млять, ти втрутилася в мою тонку ментальну організацію, зламала мій внутрішній космос...

    ВідповістиВидалити
  6. Та одне любити, а інше не розуміти...

    Ой, вибач ше раз шо я так поступила. просто я думала в тебе захисний шар потужніший. Не бери все до голови шо говорять всякі та Наталі... Вибач

    ВідповістиВидалити
  7. Мій захистний шар різної товщини для різних людей

    ВідповістиВидалити
  8. І в чому я провинилась шо шар для мене настіки тонкий?..

    ВідповістиВидалити
  9. а краще б провинилась. Думаю було б все краще. Господи, яке я паршиве створіння...

    ВідповістиВидалити
  10. ага....дихай глибше і старайся бути краще, все інше не варте уваги...

    ВідповістиВидалити