• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Matura 2017 czerwiec

0 głosów
2,771 wizyt
pytanie zadane 11 kwietnia 2020 w C i C++ przez veryape Użytkownik (580 p.)

Witam, mam straszny problem z podpunktem 4.2 z czerwcowej matury z 2017 roku. Próbowałem tak na chama wyciągać wszystkie cyfry po kolei z liczb i je porównywać, ale wynik jest błędny, męczę się z tym zadaniem już od kilku dni i nie mam pojęcia jak je ugryźć.
https://arkusze.pl/matura-informatyka-2017-czerwiec-poziom-rozszerzony/
Tutaj link do arkusza oraz plików, z góry dziękuję za odpowiedź.

1 odpowiedź

0 głosów
odpowiedź 11 kwietnia 2020 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Nie wiem, czy to najlepsze rozwiązanie, ale możesz spróbować zrobić coś takiego.

Utwórz po jednej 10 elementowej tablicy bool dla każdej z tych liczb. Przeiteruj po ich cyfrach, jeżeli dana cyfra wystąpi, to ustaw odpowiedni element tablicy na true (np. dla cyfry 7 będzie to tab[7]). Po całym takim procesie będziesz miał informacje na temat wystąpień cyfr w danej liczbie.

Na końcu wystarczy jeszcze tylko porównać dwie tablice. wink

komentarz 11 kwietnia 2020 przez veryape Użytkownik (580 p.)

Czyli jak rozumiem zrobić coś na zasadzie

Liczba = tablica[i][0]

Int temp;
While(liczba){
 temp=liczba%10;
 liczba /=10;
 Tabbool[temp]=true; 
}

I tak samo dla tablica[i][1] i poròwnać 2 bool tablice czy mają identycznie te same elementy? 

Wybacz, ze kod taki uproszczony ale aktualnie korzystam z urządzenia mobilnego, poniewaz jestem poza domem.

komentarz 11 kwietnia 2020 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Tak, mniej więcej coś takiego (nie powinno jednak być odwrotnie? tablica[1][i]).

Ja napisałem taki kod w C (nie byłem pewien w czym ty piszesz, ale to raczej nie ma wielkiego znaczenia).

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define BASE 10

void get_number_digits(unsigned int number, bool *digits) {
	while (number > 0) {
		unsigned int digit = number % BASE;
		digits[digit] = true;
		number /= BASE;
	}
}

bool use_the_same_digits(unsigned int number1, unsigned int number2) {
	bool digits1[BASE] = {0};
	get_number_digits(number1, digits1);
	
	bool digits2[BASE] = {0};
	get_number_digits(number2, digits2);

	// sizeof(digits1) == sizeof(digits2)
	return memcmp(digits1, digits2, sizeof(digits1)) == 0;
}

int main(void) {
	unsigned int number1;
	printf("Podaj pierwszą liczbę: ");
	scanf("%u", &number1);

	unsigned int number2;
	printf("Podaj drugą liczbę: ");
	scanf("%u", &number2);

	printf(
		"Liczby %d i %d %sużywają wyłącznie tych samych cyfr\n",
		number1,
		number2,
		use_the_same_digits(number1, number2) ? "" : "nie "
	);

	return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,127 wizyt
pytanie zadane 11 maja 2021 w C i C++ przez nzepik324 Początkujący (260 p.)
0 głosów
1 odpowiedź 2,213 wizyt
0 głosów
1 odpowiedź 1,755 wizyt
pytanie zadane 10 maja 2021 w C i C++ przez nzepik324 Początkujący (260 p.)

93,753 zapytań

142,713 odpowiedzi

323,356 komentarzy

63,348 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...