IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jan Němec
Člen
Avatar
Jan Němec:28.5.2020 9:25

Mám otázku jestli u tady tohohle není více řešení, protože je prý správné, ale mám použít jiné.

Zkusil jsem: static int[] GenerateRandom­Numbers(int minNumber, int maxNumber)
{
Random random = new Random();
int[] numbers = new int[6];
for (var k = 0; k < numbers.Length; k++)
{
numbers[k] = random.Next(min­Number, maxNumber);
}
return numbers;
}

static int GetIdenticalNum­berCount(int[] numbers, int searchedNumber)
{
int numberCount = 0;

for (var k = 0; k < numbers.Length; k++)
{
if (numbers[k] == searchedNumber)
{
numberCount++;
}
}
return numberCount;
}
static int GetMaxNumberO­fIdenticalNum­bers(int[] numbers, int minValue, int maxValue)
{
int maxNumberCount = 0;

for (int k = minValue; k <= maxValue; k++)
{
int numberCount = GetIdenticalNum­berCount(number­s, k);
if (numberCount > maxNumberCount)
{
maxNumberCount = numberCount;
}
}
return maxNumberCount;
}

static void Main(string[] args)
{
int minNumber = 1;
int maxNumber = 49;
int[] numbers = GenerateRandom­Numbers(minNum­ber, maxNumber);

int maxIdenticalCount = GetMaxNumberO­fIdenticalNum­bers(numbers, minNumber, maxNumber);
if (maxIdenticalCount == 1)
{
Console.Write­Line("To je škoda! Nevyhrál si, ale ostatní taky ne.");
}
else
{
Console.WriteLine(" " + maxIdenticalCount + "Gratuluji, vyhrál si.");
}

Console.ReadKey();

Chci docílit:

  • metodu pro zadávání 6 čísel do pole
  • metodu pro generování 6 čísel do pole (generujeme čísla 1 - 49)
  • v hlavním programu postupně porovnávame prvky pole a zjišťujete kolik čísel je stejných
  • na základě počtu stejných čísel napište vtipné vyhodnocení
 
Odpovědět
28.5.2020 9:25
Avatar
Jan Stodůlka
Tvůrce
Avatar
Jan Stodůlka:28.5.2020 10:08
  1. v metodě GetMaxNumberO­fIdenticalNum­bers procházíš celý rozsah čísel 1-49, stačilo by projít jen to pole o 6x prvcích
for (var k = 0; k < numbers.Length; k++)
{
    int numberCount = GetIdenticalNumberCount(numbers, numbers[k] );
...
  1. v Main kontroluješ maxIdenticalCount == 1 pak by jsi mohl upravit program tak aby při větším výskytu opakování jak 1, celou kontrolu ukončil, protože je již dál zbytečná.
  1. také pro každé číslo procházíš znova celé pole. pokud by jsi použil dva vnořené cykly, pak (ušetříš za volání procky a cykly) můžeš provádět kontrolu jen od dalšího indexu.
bool isDuplicite = false;

for (var k = 0; k < numbers.Length - 1; k++)
{
  isDuplicite = false;
  for (var j = k + 1; j < numbers.Length; j++)
  {
    if ( numbers[k] == numbers[j])
    {
        isDuplicite = true;
        break;
    }
  }
  if (isDuplicite)
  {
    break;
  }
}

if (!isDuplicite)
{
  Console.WriteLine("To je škoda! Nevyhrál si, ale ostatní taky ne.");
}
else
{
  Console.WriteLine(" " + maxIdenticalCount + "Gratuluji, vyhrál si.");
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
28.5.2020 10:08
Nechodím do hospody, protože doma programuji.
Avatar
Jan Stodůlka
Tvůrce
Avatar
Jan Stodůlka:28.5.2020 10:15

Teď jsem si všiml, že potřebuješ i počet opakování, pak tedy bod 2 ignoruj a bod 3 by vypadal takto:

int maxIdenticalCount = 0;

for (var k = 0; k < numbers.Length - 1; k++)
{
  int max = 0;
  for (var j = k + 1; j < numbers.Length; j++)
  {
    if ( numbers[k] == numbers[j])
    {
        ++max;
    }
  }
  if (max > maxIdenticalCount)
  {
    maxIdenticalCount = max;
  }
}

if (maxIdenticalCount == 0)
{
  Console.WriteLine("To je škoda! Nevyhrál si, ale ostatní taky ne.");
}
else
{
  Console.WriteLine(" " + maxIdenticalCount + "Gratuluji, vyhrál si.");
}
Nahoru Odpovědět
28.5.2020 10:15
Nechodím do hospody, protože doma programuji.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.