c/c++ Wyszukiwanie elementów w tablicy dwuwymiarowej

0

Witam,
mam do zrobienia program który macierz 6x6 wypełnia losowymi liczbami z zakresu 1-49,a następnie:
-Prosi użytkownika o podanie 6 liczb z zakresu 1-49(jeśli podana wartość jest bledną,to prosi o poprawę danych).
-Za pomocą printfa wypisać zawartość macierza w układzie graficznym
-Program ma podać w którym wierszu użytkownik trafił jakieś liczby oraz ile ich było .Jeśli trafił więcej niż 1 to wypisać wszystkie trafienia
-Program podsumuje otrzymane wyniki i poda w którym wierszu użytkownik trafił najwięcej liczb i jaka była ich ilość.

O ile pierwotne zadanie i 2 pierwsze podpunkty i nie sprawiły mi większych problemów, to z 3 i 4 mam problemu.Po prostu nie wiem jak jak mam znaleźć te trafienia w wierszach z liczb od użytkownika które są zapisane już w innej tablicy.Na dole jest kod,byłbym wdzięczny za jakąś pomoc.

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

#define _CRT_SECURE_NO_WARNINGS


int main(){

	
	int i,j;
	int tab[7];
	int tablica[6][6];
	int traf;
	int iletraf;
	srand(time(NULL));

//Tworzenie macierza
	   
	    for(i=0;i<6;i++){
			for(j=0;j<6;j++)
				tablica[i][j]=rand() % 49+1;
		}
		
		 printf("Podaj 6 liczb 1-49:\n");
//Pobieranie 6 liczb z zakresu 1-49 od uzytkownika
		for(i=1;i<7;i++){
			while(scanf("%d",&tab[i])!=1 || tab[i]>50 || tab[i]<1 || getchar()!='\n'){
				printf("Bledne dane \n");
			while (getchar() != '\n');
			}
		}
		
//Wypisanie macierza w printfie
        printf("\n\n\n\n");
		for(i=0;i<6;i++){
			for(j=0;j<6;j++)
				printf("%3d \t",tablica[i][j]);
			printf("\n");
		}
		printf("\n");

	
//Trafienia uzytkownika
for (i=0; i<6; i++)
 {
 traf = tab[i];
for (j=0; j<6; j++)
 if(tablica[i][j] ==traf)
	 traf=tablica[i][j];
 printf("W wierszu %d = %d trafen\n",i,traf);
 }
 printf("\n");


 //Suma trafien uzytkownika

	return 0;
} 
0
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zlikwiduj smrodek przy inkrementacji: http://4programmers.net/Forum/1101404
  3. Używaj znaczników <``code=cpp>tu twój kod<``/code>
  4. Zapoznaj się z pojęciem funkcji bardzo tu się przyda
  5. Wg mnie powinno tu być losowanie bez powtórzeń dla każdego wiersza: http://4programmers.net/Forum/1058041
  6. Radzę tuż po losowaniu oraz wpisaniu liczb przejść na bit maski, wszystkie te operacje stają się prostsze
0

Podczas szukania brakuje Ci jednego poziomu zagnieżdżenia pętli for.

1

Wersja podstawowa może wyglądać tak:

static const size_t ROWS_COUNT = 6;
static const size_t COLS_COUNT = 6;
static const size_t UNUM_COUNT = 6;
int row_hits[ROWS_COUNT];
int row_hits_info[ROWS_COUNT][UNUM_COUNT];

for (size_t row = 0; row < ROWS_COUNT; ++row) {
    row_hits[row] = 0;
    for (size_t unum_idx = 0; unum_idx < UNUM_COUNT; ++unum_idx) {
        row_hits_info[row][unum_idx] = 0;
        for (size_t col = 0; col < COLS_COUNT && !row_hits_info[row][unum_idx]; ++col) {
            if (matrix[row][col] == user_nums[unum_idx]) {
                ++row_hits[row];
                ++row_hits_info[row][unum_idx];
                matrix[row][col] *= -1; // bardzo brzydki hack, zeby nie uzyc wartoci jeszcze raz
            }    
        }
    }
}

Oczywiście można to zoptymalizować, ale chyba bardziej istotne w tym momencie jest byś zrozumiał koncepję.

1

A tak to wygląda na bitach:

uint64_t bitToMask(unsigned bit)
  {
   static const uint64_t one=1;
   return one<<bit;
  }
  
unsigned bitCount(uint64_t mask)
  {
   unsigned count=0;
   for(;mask;++count) mask&=mask-1;
   return count;
  }
  
...
   for(i=0;i<ROWCOUNT;++i)
     {
      printf("%d:",i+1);
      for(k=0;k<RANGE;++k) if(tab[i]&bitToMask(k)) printf("%3d",k+1);
      printf(" :: %d trafen\n",bitCount(tab[i]&value));
     }

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