#include <iostream> #include <vector> using namespace std; void LiczCiagFibonacciegodox(vector<int>& CiagFibonacciego, int rozmiar) { for (int i = CiagFibonacciego.size(); CiagFibonacciego[i - 1] <= rozmiar; i++) CiagFibonacciego.push_back(CiagFibonacciego[i - 1] + CiagFibonacciego[i - 2]); return; } void LiczCiagFibonacciego(vector<int>& CiagFibonacciego, int rozmiar) { for (int i = CiagFibonacciego.size(); i <= rozmiar; i++) CiagFibonacciego.push_back(CiagFibonacciego[i - 1] + CiagFibonacciego[i - 2]); return; } int PrzelicznaDziesietny(vector<int>& CiagFibonacciego, bool cyfry[], int dlugosc) { int liczba = 0; for (int i = 0; i < dlugosc; i++) liczba += cyfry[i] * CiagFibonacciego[i]; return liczba; } void LiczWynik(int liczba, vector<int>& CiagFibonacciego) { int dlugosc; for (int i = CiagFibonacciego.size() - 1; i >= 0; i--) { if (CiagFibonacciego[i] <= liczba) { dlugosc = i + 1; break; } } bool * cyfry = new bool[dlugosc]; for (int i = dlugosc - 1; i >= 0; i--) { cyfry[i] = 0; if (liczba >= CiagFibonacciego[i]) { cyfry[i] = 1; cyfry[i - 1] = 0; i--; liczba -= CiagFibonacciego[i]; } } cout << dlugosc; for (int i = 0; i < dlugosc; i++) cout << " " << cyfry[i]; cout << endl; delete[] cyfry; return; } void Licz(int & dlugosc1, int & dlugosc2, vector<int>& ciagFibonacciego) { cin >> dlugosc1; bool *l1 = new bool[dlugosc1]; for (int i = 0; i < dlugosc1; i++) cin >> l1[i]; cin >> dlugosc2; bool *l2 = new bool[dlugosc2]; for (int i = 0; i < dlugosc2; i++) cin >> l2[i]; if (dlugosc1 > dlugosc2) LiczCiagFibonacciego(ciagFibonacciego, dlugosc1); else LiczCiagFibonacciego(ciagFibonacciego, dlugosc2); int liczba1 = PrzelicznaDziesietny(ciagFibonacciego, l1, dlugosc1); int liczba2 = PrzelicznaDziesietny(ciagFibonacciego, l2, dlugosc2); int liczba = liczba1 * liczba2; LiczCiagFibonacciegodox(ciagFibonacciego, liczba); LiczWynik(liczba, ciagFibonacciego); delete[] l1; delete[] l2; return; } int main() { int t; // liczba zestawow int n1; // dlugosc 1 liczby int n2; // dlugosc 2 liczby vector <int> ciagFibonacciego; ciagFibonacciego.push_back(1); ciagFibonacciego.push_back(2); cin >> t; for (int i = 0; i < t; i++) Licz(n1, n2, ciagFibonacciego); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #include <iostream> #include <vector> using namespace std; void LiczCiagFibonacciegodox(vector<int>& CiagFibonacciego, int rozmiar) { for (int i = CiagFibonacciego.size(); CiagFibonacciego[i - 1] <= rozmiar; i++) CiagFibonacciego.push_back(CiagFibonacciego[i - 1] + CiagFibonacciego[i - 2]); return; } void LiczCiagFibonacciego(vector<int>& CiagFibonacciego, int rozmiar) { for (int i = CiagFibonacciego.size(); i <= rozmiar; i++) CiagFibonacciego.push_back(CiagFibonacciego[i - 1] + CiagFibonacciego[i - 2]); return; } int PrzelicznaDziesietny(vector<int>& CiagFibonacciego, bool cyfry[], int dlugosc) { int liczba = 0; for (int i = 0; i < dlugosc; i++) liczba += cyfry[i] * CiagFibonacciego[i]; return liczba; } void LiczWynik(int liczba, vector<int>& CiagFibonacciego) { int dlugosc; for (int i = CiagFibonacciego.size() - 1; i >= 0; i--) { if (CiagFibonacciego[i] <= liczba) { dlugosc = i + 1; break; } } bool * cyfry = new bool[dlugosc]; for (int i = dlugosc - 1; i >= 0; i--) { cyfry[i] = 0; if (liczba >= CiagFibonacciego[i]) { cyfry[i] = 1; cyfry[i - 1] = 0; i--; liczba -= CiagFibonacciego[i]; } } cout << dlugosc; for (int i = 0; i < dlugosc; i++) cout << " " << cyfry[i]; cout << endl; delete[] cyfry; return; } void Licz(int & dlugosc1, int & dlugosc2, vector<int>& ciagFibonacciego) { cin >> dlugosc1; bool *l1 = new bool[dlugosc1]; for (int i = 0; i < dlugosc1; i++) cin >> l1[i]; cin >> dlugosc2; bool *l2 = new bool[dlugosc2]; for (int i = 0; i < dlugosc2; i++) cin >> l2[i]; if (dlugosc1 > dlugosc2) LiczCiagFibonacciego(ciagFibonacciego, dlugosc1); else LiczCiagFibonacciego(ciagFibonacciego, dlugosc2); int liczba1 = PrzelicznaDziesietny(ciagFibonacciego, l1, dlugosc1); int liczba2 = PrzelicznaDziesietny(ciagFibonacciego, l2, dlugosc2); int liczba = liczba1 * liczba2; LiczCiagFibonacciegodox(ciagFibonacciego, liczba); LiczWynik(liczba, ciagFibonacciego); delete[] l1; delete[] l2; return; } int main() { int t; // liczba zestawow int n1; // dlugosc 1 liczby int n2; // dlugosc 2 liczby vector <int> ciagFibonacciego; ciagFibonacciego.push_back(1); ciagFibonacciego.push_back(2); cin >> t; for (int i = 0; i < t; i++) Licz(n1, n2, ciagFibonacciego); return 0; } |