Treść zadania:
Plik punkty.txt zawiera 1000 wierszy, w których zapisane są po dwie liczby całkowite z przedziału [0, 10000]
, oddzielone pojedynczym odstępem. Para liczb w każdym wierszu odpowiada współrzędnym (x, y) jednego punktu w układzie kartezjańskim. W danych punkty się nie powtarzają. Napisz program, który da odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku odp.txt, a każdą odpowiedź poprzedź numerem oznaczającym odpowiednie zadanie.
Punkt, w którym mam problem:
- 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.
Przykład:
Liczby będące współrzędnymi punktu (505, 55) nie są cyfropodobne, ponieważ do zapisania
pierwszej liczby wykorzystano cyfry 0 i 5, a do zapisania drugiej z nich wykorzystano tylko cyfrę 5.
Mianowicie otrzymuję w wyniku 22 liczby, a powinienem otrzymać 5.
Czy mógłby mi ktoś pomóc i wyjaśnić, gdzie mam błąd?
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream in;
ofstream out;
struct punkt{
string x,y;
}q;
vector<punkt>w;
void wczytanie_punktow_do_stringa(){
punkt q;
in.open("punkty.txt");
while(in>>q.x>>q.y)
w.push_back(q);
in.close();
}
void odp2(){
int cyfropodobne = 0;
bool TN = false;
for(int i = 0; i < w.size(); i++){
for(int j = 0; j < 5; j++){
if(w[i].x[j] == w[i].y[0] || w[i].x[j] == w[i].y[1] || w[i].x[j] == w[i].y[2] || w[i].x[j] == w[i].y[3] || w[i].x[j] == w[i].y[4]){
TN = true;
continue;
}
else {
TN = false;
break;
}
}
if(TN == true)
cyfropodobne++;
}
cout<<"2. "<<endl;
cout<<cyfropodobne<<endl;
}
int main()
{
wczytanie_punktow_do_stringa();
odp2();
return 0;
}