Поиск, использующий мультипликативный критерий - C#
Формулировка задачи:
Доброе время суток! Подскажите, почему первый элемент никогда не находится?
Листинг программы
- static void Main()
- {
- int m, n;
- Console.WriteLine("Please enter array size");
- n = Convert.ToInt32(Console.ReadLine());
- Random rnd = new Random();
- int[] a = new int[n + 4];
- for (int i = 0; i < n; i++)
- Console.Write("{0,4}", a[i] = rnd.Next(100, 1001));
- Console.WriteLine("Please enter Key to find in unsorted array");
- m = Convert.ToInt32(Console.ReadLine());
- // Unsorted array value search multiplication
- int ii = 4;
- a[n + 1] = m;
- int cycles = 1;
- while ((a[ii - 3] - m) * (a[ii - 2] - m) * (a[ii - 1] - m) * (a[ii] - m) != 0)
- {
- cycles++;
- if (a[ii - 3] == m)
- {
- ii = ii - 3;
- break;
- }
- else if (a[ii - 2] == m)
- {
- ii = ii - 2;
- break;
- }
- else if ((a[ii - 1] == m))
- {
- ii = ii - 1;
- break;
- }
- ii = ii + 4;
- }
- if (ii < n + 1)
- {
- Console.WriteLine("Value " + m + " is found. Total cycles: " + cycles);
- }
- else
- {
- Console.WriteLine("Not found");
- }
- }
Решение задачи: «Поиск, использующий мультипликативный критерий»
textual
Листинг программы
- int ii = 4; // Потому, что 4
- a[n + 1] = m;
- int cycles = 1;
- while ((a[ii - 3] - m) // минус 3, очевидно, равно единице, не нулю
- * (a[ii - 2] - m) * (a[ii - 1] - m) * (a[ii] - m) != 0)
- {
- cycles++;
- if (a[ii - 3] == m)
- {
- ii = ii - 3;
- break;
- }
- else if (a[ii - 2] == m)
- {
- ii = ii - 2;
- break;
- }
- else if ((a[ii - 1] == m))
- {
- ii = ii - 1;
- break;
- }
- ii = ii + 4; // И дальше это значение только увеличивается
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д