algorytm porównujący ciągi liczbowe

0

Witam. Z góry zaznaczam, że jestem świeży w programowaniu.
Szukam rozwiązania dla punktu b. treści zadania zamieszczonej poniżej. Chodzi o prostą grę w której gracz musi zgadnąć liczby wylosowane przez komputer. Męczę się już z tym od 2 dni i nie umiem stworzyć algorytmu który podawałby ilość dobrych cyfr z podanego przez użytkownika ciągu(służyć to ma jako podpowiedź dla gracza), ale każdą żeby zliczał tylko jeden raz. Proszę o podpowiedź doświadczonych programistów bo mnie się już pomysły wyczerpały:)

Działa to tak:

  1. Program generuje losowy ciąg 6 liczb, np. „ 1 2 3 4 5 6 ”.
  2. Użytkownik podaje swój ciąg liczbowy, np. „1 1 2 3 6 4”.
  3. Program sprawdza dwie rzeczy:
    a. Ilość zgodnych wartości liczbowych i pozycji (w przykładzie pierwsza jedynka jest na dobrej pozycji)
    b. Ilość dobrych cyfr z kodu (w przykładzie mamy 3 takie cyfry: 1, 2, 3, ale tylko 1 jest na dobrej pozycji)

poniżej zamieszczam kod programu.

#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include <stdlib.h>

#pragma hdrstop
#pragma argsused

main(){

  int losowa[10], wpisana[10], i,j, pom=0, licznik, licznik1;
  
  system("cls");
  srand ( time(NULL) );

  for (i=1; i<8; i++)
  {
    losowa[i] = rand() % 6 + 1;
  }

    for (i=1; i<7; i++)
    {
      cout<<"Wpisz "<<i<<" liczbe szukanego ciagu liczb od 1 do 6: ";
      cin>>wpisana[i];
    }
  
    cout<<endl<<endl<<endl; 
  
    licznik=0;
    for(i=1; i<7; i++)
    {  
      if (wpisana[i]==losowa[i])
      {
        cout<<"zgodna wartosc liczbowa na pozycji: "<<i<<endl;
        licznik++;
      }
    }

    licznik1=0;
    for(j=1; j<7; j++)
    {  
      for (i=1; i<7; i++)
      {
        if (losowa[j]==wpisana[i] && wpisana[i]!=pom)
        {
          pom=losowa[j];
          licznik1++;
        }
      }
    }

    cout<<"ilosc dobrych cyfr z kodu: "<<licznik1<<endl;
    cout<<endl;

    cout<<"szukana liczba: ";
    for (i=1; i<7; i++)
    {
      cout<<losowa[i];
    }

    cout<<endl<<endl;
    getch();
}
0

W takim najtrywialniejszym rozwiązaniu tego możesz zrobić tak:
Dla każdej wartości z z losowego ciągu sprawdzić czy istnieje taka wartość w ciągu użytkownika.
lub odwrotnie. 2 pętle for: jedna przechodzi po elementach pierwszej tablicy, a druga po drugiej.

0

Gdzie ty znalazłeś na tyle debilny kurs zeby zamiast
poprawnie pisać <iostream> pisze sie <iostream.h> ?
To jeszcze zniose ale żeby main a nie int main albo chociaż void main? No listości...
Kup sobie Symfonie c++ Grębosza

0

Kod 3b:
bool Tablica[6]; // Tablica bool'i(true i false) w której będzie, czy liczba(tutaj jako index będzie) wystąpiła.
for(int a = 0; a != 8; a++)
Tablica[losowa[a] - 1] = true; // Sprawdzanie czy wystąpiła.
int LiczbaPasujacych = 0;
for(int b = 0; b != 8; b++)
if(Tablica[wpisana[b]]-1)LiczbaPasujacych++;
JUŻ! Sory, ale skoro już tyle napisał, mogę chyba mu dać gotowca?

Sorry, ale nie rozumiem pkt. 3b

0

W punkcie b chodzi o to, aby zliczyć ile cyfr podanych przez gracza znajduje się w ciągu wylosowanym przez komputer np. w ciągu 113566 wylosowanym przez kompa i ciągu 144211 podanym przez gracza jest jedna cyfra, która jest wspólna. W punkcie 3a musi być również na tej samej pozycji ciągu a w 3b wystarczy, że taka liczba jest w ciągu i tyle:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1