double ofxFfd::bernstein (int u, int v, double STUpt) { double binomial; double bern; /********* BINOMIAL COEFFICIANT OF (v u) *********/ binomial = factorials(v) / (factorials(v - u) * factorials(u)); bern = binomial * pow(STUpt, (double)u) * pow((1-STUpt), (double)(v-u)); return bern; }
string getPermutation(int n, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function string perm(n, '0'); vector<int> factorials(n, 1); vector<int> numbers(n, 1); for (int i = 1; i < n; i++) { factorials[i] = factorials[i-1]*i; numbers[i] = i+1; } for (int i = 0; i < n; i++) { int digit = (k-1) / factorials[n-1-i]; perm[i] = '0' + numbers[digit]; numbers.erase(numbers.begin()+digit); k -= digit * factorials[n-1-i]; } return perm; }
string getPermutation(int n, int k) { vector<int> numbers(n), factorials(n+1); factorials[0] = 1; int sum = 1; for (int i = 1; i <= n; ++i) { numbers[i-1] = i; sum *= i; factorials[i] = sum; } k--; string result = ""; for (int i = 1; i <= n; ++i) { int index = k/factorials[n-i]; result += to_string(numbers[index]); numbers.erase(numbers.begin()+index); k -= index*factorials[n-i]; } return result; }
int main() { std::vector<int> vec(10); std::cout << "iota:" << '\n'; boost::iota(vec, 1); for (auto e : vec) std::cout << e << " "; std::cout << '\n'; std::cout << "reversed:" << '\n'; for (auto e : vec | boost::adaptors::reversed) std::cout << e << " "; std::cout << '\n'; std::cout << "sums:" << '\n'; std::vector<int> sums(10); boost::partial_sum(vec, begin(sums)); for (auto e : sums) std::cout << e << " "; std::cout << '\n'; // perhaps as exercise? std::cout << "evens:" << '\n'; std::vector<int> evens(10); boost::fill(evens, 2); // std::vector<int> evens(10, 2); boost::partial_sum(evens, begin(evens)); for (auto e : evens) std::cout << e << " "; std::cout << '\n'; boost::partial_sum(evens | boost::adaptors::reversed, begin(evens)); for (auto e : evens) std::cout << e << " "; std::cout << '\n'; // perhaps as exercise? std::cout << "factorials:" << '\n'; std::vector<int> factorials(10); boost::partial_sum(vec, begin(factorials), std::multiplies<int>()); for (auto e : factorials) std::cout << e << " "; std::cout << '\n'; std::cout << "die:" << '\n'; std::random_device random_device; std::default_random_engine random_engine(random_device()); int a = 1, b = 6; std::uniform_int_distribution<int> uniform_distribution(a, b); auto die = std::bind(uniform_distribution, random_engine); std::cout << die() << '\n'; std::cout << "die throws:" << '\n'; std::vector<int> die_throws(10); boost::generate(die_throws, die); // readability: "generate die_throws using die [duh]" for (auto e : die_throws) std::cout << e << " "; std::cout << '\n'; std::cout << "die throws, from #2 to #5:" << '\n'; for (auto e : die_throws | boost::adaptors::sliced(2, 5)) std::cout << e << " "; std::cout << '\n'; auto count_unique_low = boost::count_if( die_throws | boost::adaptors::uniqued, [](int result) { return result <= 3; } ); auto count_unique_high = boost::count_if( die_throws | boost::adaptors::uniqued, [](int result) { return result > 3; } ); std::cout << "count_unique_low = " << count_unique_low << '\n'; std::cout << "count_unique_high = " << count_unique_high << '\n'; /* std::vector<int> v; boost::push_front(v, boost::istream_range<int>(std::cin)); for (auto e : v) std::cout << e << " "; std::cout << '\n'; */ std::vector<int> v; boost::push_back(v, boost::irange(100, 200, 3)); // first, last, step-size for (auto e : v) std::cout << e << " "; std::cout << '\n'; }