Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <chrono>
- #include <algorithm>
- #include <vector>
- #include <string>
- using namespace std;
- void sequence();
- void parallel();
- void printResult(vector<string> &vector);
- void menu();
- int getSum(vector<int> &number, int sum);
- int value_async;
- clock_t startTimeParallel;
- clock_t endTimeParallel;
- vector<string> resultsParallel;
- int value;
- clock_t startTime;
- clock_t endTime;
- vector<string> results;
- int main() {
- cout << endl << "Program start" << endl;
- startTime = clock();
- sequence();
- endTime = clock();
- cout << endl << "Sekwencyjny Wynik: " << value << " Czas: "
- << float(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
- startTimeParallel = clock();
- parallel();
- endTimeParallel = clock();
- cout << endl << "Rownolegly Wynik: " << value_async << " Czas: "
- << float(endTimeParallel - startTimeParallel) / CLOCKS_PER_SEC << "s" << endl;
- menu();
- return 0;
- }
- void menu() {
- string input;
- while (input != "0") {
- cout << endl << endl << "Wyniki" << endl;
- cout << "1 - Wydrukuj wyniki sekwencyjne" << endl;
- cout << "2 - Wydrukuj wyniki rownolegle" << endl;
- cout << "0 - Wyjdz" << endl;
- cin >> input;
- if (input == "1")
- printResult(results);
- else if (input == "2")
- printResult(resultsParallel);
- else if (input == "0")
- break;
- else
- cout << endl << "Zly wybor" << endl;
- }
- }
- void printResult(vector<string> &vector) {
- for (const auto &item : vector) {
- cout << item << endl;
- }
- }
- unsigned int getInt(vector<int> &vector, int startIndex, int endIndex) {
- unsigned int result = 0;
- for (int i = startIndex; i <= endIndex; ++i) {
- result = result * 10 + vector[i];
- }
- return result;
- }
- int getSum(vector<int> &number, int sum) {
- for (int i = 0; i < 9; i++) {
- unsigned int firstINumber = getInt(number, 0, i);
- if (firstINumber == 0) {
- continue;
- }
- unsigned int secondINumber = getInt(number, i + 1, 9);
- if (secondINumber == 0) {
- continue;
- }
- for (int j = 0; j < 9; j++) {
- if (i == j) {
- continue;
- }
- unsigned int firstNumber, secondNumber, thirdNumber;
- firstNumber = firstINumber;
- secondNumber = getInt(number, i + 1, j);
- thirdNumber = getInt(number, j + 1, 9);
- if (thirdNumber == 0 || secondNumber == 0 || firstNumber > 100) {
- continue;
- }
- try {
- if ((float) firstNumber + (float) ((float) secondNumber / (float) thirdNumber) == 100.0) {
- sum += 2;
- }
- }
- catch (exception &e) {
- continue;
- }
- }
- }
- return sum;
- }
- void sequence() {
- std::vector<int> src = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- vector<vector<int>> vectorTab;
- vectorTab.push_back(src);
- while (next_permutation(src.begin(), src.end())) {
- vectorTab.push_back(src);
- }
- value = 0;
- for (auto &i : vectorTab) {
- vector<int> &vector = i;
- int sum = 0;
- sum = getSum(vector, sum);
- value += sum;
- }
- }
- void parallel() {
- std::vector<int> src = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- vector<vector<int>> vectorTab;
- vectorTab.push_back(src);
- while (next_permutation(src.begin(), src.end())) {
- vectorTab.push_back(src);
- }
- value_async = 0;
- #pragma omp parallel for reduction(+:value_async)
- for (auto &i : vectorTab) {
- #pragma omp parallel for
- vector<int> &vector = i;
- int sum = 0;
- sum = getSum(vector, sum);
- value_async += sum;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement