matura 2017 czerwiec - POMOC W ZADANIU

matura 2017 czerwiec - POMOC W ZADANIU
ZE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Potrzebuję pomocy przy zadaniu 4.2 z arkusza
Dwie liczby są cyfropodobne, jeżeli do zapisania każdej z nich wykorzystujemy takie same cyfry dziesiętne. Podaj ile jest punktów, których współrzędne są cyfropodobne. Przykład: Liczby będące współrzędnymi punktu (123, 1321) są cyfropodobne, ponieważobie zostały zapisane za pomocą cyfr 1, 2, 3.

Tyle zdołałam zrobić, niestety wynik jest nieprawidłowy i nie mam pomysłu co dalej
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <vector>
using namespace std;

int main()
{

ifstream plik("punkty.txt", ios::in);
ofstream zapis("wyniki4.txt",ios::app);
int licznik = 0;
int x[1000][2];
vector <int> dane1;
vector <int> dane2;
bool t = -1;
int d,d2;

for(int i = 0; i<1000; i++)
{
	plik >> x[i][0];
	plik >> x[i][1];
}
int liczba,liczba2;

	for(int i = 0; i<1000; i++)
{
	liczba = x[i][0];
	liczba2 = x[i][1];
	
	do{
	d = liczba%10;
	dane1.push_back(d);
	liczba/=10;
	
	}
	while(liczba);
	do{
	d2 = liczba2%10;
	dane2.push_back(d2);
	liczba2/=10;
	
	}
	while(liczba2);
	
	
	for( int i = 0; i < dane1.size(); i++)
	{
	for(int j = 0; j < dane2.size(); j++)
	{
		if(dane1[i]==dane2[j])
		{
			 t = true;
		}
		else{
			 t = false;
		}
		
	}
		for( int i = 0; i < dane2.size(); i++)
	{
	for(int j = 0; j < dane1.size(); j++)
	{
		if(dane2[i]==dane1[j])
		{
			 t = true;
		}
		else{
			 t = false;
		}
		
	}
}

    // cout<< dane1[ i ]<<" ";
}
    if(t)
    {
    	licznik++;
	}
     dane1.clear();
     dane2.clear();
}
cout<<licznik<<endl;
    zapis<<licznik<<endl;
     
    

plik.close();
zapis.close();
return 0;

}

Spearhead
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1007
2

Możesz sobie przerobić liczbę na std::set jej cyfr i porównać

Kopiuj
#include <iostream>
#include <set>

int main()  {
    int a=123, b=1321;
    std::set<int> a_digits, b_digits;

    while(a) {
        a_digits.insert(a%10);
        a /= 10;
    }
    while(b) {
        b_digits.insert(b%10);
        b /= 10;
    }
    std::cout << std::boolalpha << (a_digits == b_digits) << std::endl;
}

W Pythonie to zajmuje dwie linijki

Kopiuj
>>> a, b = (123, 1321)
>>> set(str(a)) == set(str(b))
True

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Tyle wystarczy:

Kopiuj
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;

short toset(const string &s)
{
	short ret=0;
	for(int i=0;i<s.size();++i) ret|=1<<(s[i]-'0');
	return ret;
}

int main()
{
	ifstream fin("punkty.txt");
	size_t count=0;
	for(string a,b;fin>>ws>>a>>ws>>b;count+=(toset(a)==toset(b))) {}
	ofstream fout("wyniki4.txt");
	fout<<count;
	return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.