Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>    // find()
  4. #include <numeric>      // accumulate()
  5.  
  6. #define DEBUG 1
  7.  
  8. using namespace std;
  9.  
  10. const int rangeMin = 20;
  11. const int rangeMax = 100;
  12.  
  13. vector<int> generateBinaryVector(int n);
  14. vector<int> generateFibVector();
  15.  
  16. int main() {
  17.     vector<int> fibVector = generateFibVector();
  18.    
  19.     #if DEBUG
  20.     cout << "Wygenerowano tablice ciagu Fibonacciego: {";
  21.     for (vector<int>::iterator it = fibVector.begin(); it != fibVector.end(); ++it) {
  22.         cout << *it << ", ";
  23.     }
  24.     cout << "\b\b}" << endl << endl;
  25.     #endif
  26.    
  27.     for (int i=rangeMin; i<=rangeMax; i++) {
  28.         vector<int> binVector = generateBinaryVector(i);
  29.         int sum = accumulate(binVector.begin(), binVector.end(), 0);
  30.        
  31.         #if DEBUG
  32.         cout << "Sprawdzana liczba: " << i << " (postac binarna: ";
  33.         for (vector<int>::iterator it = binVector.begin(); it != binVector.end(); ++it) {
  34.             cout << *it;
  35.         }
  36.         cout << "; suma: " << sum << ")... ";
  37.         #endif
  38.        
  39.         if (find(fibVector.begin(), fibVector.end(), sum) != fibVector.end()) {
  40.             #if DEBUG
  41.             cout << "pasuje!" << endl;
  42.             #else
  43.             cout << i << endl;
  44.             #endif
  45.         }
  46.         #if DEBUG
  47.         else {
  48.             cout << "nie pasuje" << endl;
  49.         }
  50.         #endif
  51.     }
  52.    
  53.     return 0;
  54. }
  55.  
  56. vector<int> generateFibVector() {
  57.     int digitCount = generateBinaryVector(rangeMax).size(); //maksymalna mozliwa suma
  58.     int currentValue;
  59.     vector<int> fibVector;
  60.    
  61.     fibVector.push_back(0);
  62.     fibVector.push_back(1);
  63.     fibVector.push_back(1);
  64.    
  65.     while (true) {
  66.         currentValue = fibVector.back() + fibVector.end()[-2];
  67.        
  68.         if (currentValue > digitCount) {
  69.             break;
  70.         }
  71.         else {
  72.             fibVector.push_back(currentValue);
  73.         }
  74.     }
  75.    
  76.     return fibVector;
  77. }
  78.  
  79. vector<int> generateBinaryVector(int n) {
  80.     vector<int> binaryValue;
  81.    
  82.     for (int i=0;n>0;i++) {
  83.         binaryValue.insert(binaryValue.begin(), n%2);
  84.         n/=2;
  85.     }
  86.    
  87.     return binaryValue;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement