Поиск, использующий мультипликативный критерий - 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; // И дальше это значение только увеличивается
}