Найдите глюк в программе - C#
Формулировка задачи:
само задание:
"Получить все сочетания из девяти цифр 0, 1, 2, ..,8 по 4 элемента в каждом. Отсортировать их как десятичные числа по убыванию. (В сочетаниях цифры можно использовать несколько раз, сочетания типа 1234 и 4321 считаются одинаковыми)."
P.S. Как мне сказали тут есть мини глюк. которые немного влияет на программу. кто может подскажите
сама программа:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace foolish_app
{
class Program
{
static void Main(string[] args)
{
int curr_count = 0;
int fool_count = 0;
bool stop = false;
var list = new ArrayList();
for (var i = 1000; i < 8889; i++)
{
switch (i)
{
case 1000: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 0%"); break;
case 2000: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 10%"); break;
case 3000: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 20%"); break;
case 4000: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 30%"); break;
case 5000: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 40%"); break;
case 5500: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 50%"); break;
case 6000: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 60%"); break;
case 7000: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 70%"); break;
case 8000: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 80%"); break;
case 8500: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 90%"); break;
case 8888: Console.Clear(); Console.WriteLine("Ждите..."); Console.WriteLine("Завершено: 100%"); break;
}
var z = Convert.ToString(i);
var z1 = Convert.ToInt32(z.Substring(0, 1));
var z2 = Convert.ToInt32(z.Substring(1, 1));
var z3 = Convert.ToInt32(z.Substring(2, 1));
var z4 = Convert.ToInt32(z.Substring(3, 1));
if (!z.Contains("9"))
{
int[] curr = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
curr[z1] = curr[z1] + 1;
curr[z2] = curr[z2] + 1;
curr[z3] = curr[z3] + 1;
curr[z4] = curr[z4] + 1;
int[] comp = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
foreach (var t in list)
{
comp[0] = 0; comp[1] = 0; comp[2] = 0; comp[3] = 0; comp[4] = 0; comp[5] = 0; comp[6] = 0; comp[7] = 0; comp[8] = 0;
var t1 = Convert.ToInt32(Convert.ToString(t).Substring(0, 1));
comp[t1] = Convert.ToInt32(comp[t1] + 1);
var t2 = Convert.ToInt32(Convert.ToString(t).Substring(1, 1));
comp[t2] = Convert.ToInt32(comp[t2] + 1);
var t3 = Convert.ToInt32(Convert.ToString(t).Substring(2, 1));
comp[t3] = Convert.ToInt32(comp[t3] + 1);
var t4 = Convert.ToInt32(Convert.ToString(t).Substring(3, 1));
comp[t4] = Convert.ToInt32(comp[t4] + 1);
stop = false;
if ((curr[0] == comp[0]) && (curr[1] == comp[1]) && (curr[2] == comp[2]) && (curr[3] == comp[3]) && (curr[4] == comp[4]) && (curr[5] == comp[5]) && (curr[6] == comp[6]) && (curr[7] == comp[7]) && (curr[8] == comp[8]))
{
fool_count++;
stop = true;
break;
}
}
if (!stop)
{
list.Add(z);
curr_count++;
}
}
}
foreach (var t in list)
{
Console.Write(t+" ");
}
Console.WriteLine();
Console.WriteLine("Чисел удовлетворяющих условию: " + curr_count);
Console.WriteLine("Чисел НЕудовлетворяющих условию: " + fool_count);
Console.ReadKey();
}
}
}
up!up!up!
Решение задачи: «Найдите глюк в программе»
textual
Листинг программы
private List<string> Search()
{
Dictionary<string, bool> dictionary = new Dictionary<string, bool>();
for (byte i = 0; i < 9; i++)
for (byte j = 0; j < 9; j++)
if (j != i)
for (byte k = 0; k < 9; k++)
if ((k != i) && (k != j))
for (byte l = 0; l < 9; l++)
if ((l != k) && (l != j) && (l != i))
{
List<byte> keyList = new List<byte>(new byte[] { i, j, k, l });
keyList.Sort();
byte[] sortKey = keyList.ToArray();
string key = string.Empty;
foreach (byte value in sortKey)
key += Convert.ToChar(value + 48);
dictionary[key] = true;
}
List<string> keys = new List<string>();
foreach (string key in dictionary.Keys)
keys.Add(key);
keys.Sort(new Comparison<string>(CompareKey));
return keys;
}
public int CompareKey(string key1, string key2)
{
return string.Compare(key2, key1);
}