Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.cpp
- // generator_stl
- //
- // Created by Владислав Голубничий on 15/03/2019.
- // Copyright © 2019 Владислав Голубничий. All rights reserved.
- //
- #include <iostream>
- #include <vector>
- #include <math.h>
- #include <set>
- using namespace std;
- class FloatGenerator
- {
- private:
- vector<float> resultFloat;
- void split(std::vector<std::string>& dest, const std::string& str, const char* delim)
- {
- char* pTempStr = strdup(str.c_str());
- char* pWord = strtok(pTempStr, delim);
- while (pWord != NULL)
- {
- dest.push_back(pWord);
- pWord = strtok(NULL, delim);
- }
- free(pTempStr);
- }
- vector<float> StringToFloat(vector<string> splitedString)
- {
- vector<float> resultFloat;
- for (int i = 0; i < splitedString.size(); i++)
- {
- if (resultFloat.size() < splitedString.size())
- {
- resultFloat.push_back(0);
- resultFloat[i] = stof(splitedString[i]);
- }
- }
- return resultFloat;
- }
- public:
- void SetGenereator ()
- {
- vector<string> resultSplit;
- string input;
- getline(cin, input);
- split(resultSplit, input, ", ");
- resultFloat = StringToFloat (resultSplit);
- sort(resultFloat.begin(), resultFloat.end(), std::greater<float>());
- resultSplit.clear();
- input.clear();
- }
- void GeneratorA()
- {
- set<float> result;
- set<float>::iterator ik;
- int startNum = 0;
- int multBlockSize = 1;
- float multBlockValue = 1;
- while (resultFloat.size() >= multBlockSize) {
- startNum = 0;
- while (startNum + multBlockSize <= resultFloat.size()) {
- multBlockValue = 1;
- for (int i = startNum ; i < startNum + multBlockSize ; i++) {
- multBlockValue *= resultFloat.at(i);
- }
- for (int i = startNum + multBlockSize ; i < resultFloat.size() ; i++ ) {
- result.insert(multBlockValue * resultFloat.at(i));
- }
- startNum++;
- }
- multBlockSize++;
- }
- for ( int i = 0 ; i < resultFloat.size() ; i++ ) {
- result.insert(resultFloat.at(i));
- }
- reverse_copy(result.begin(), result.end(), ostream_iterator<float>(cout, "\n"));
- }
- void GeneratorB()
- {
- int maxDegree = 300;
- unsigned long int New_size = resultFloat.size();
- for (int i = 0 ; i < maxDegree ; i++) {
- for (int j = 0 ; j < New_size ; j++) {
- resultFloat.push_back(resultFloat.at(j));
- }
- }
- sort(resultFloat.begin(), resultFloat.end(), std::greater<float>());
- set<float> result;
- set<float>::iterator ik;
- int startNum = 0;
- int multBlockSize = 1;
- float multBlockValue = 1;
- while (resultFloat.size() >= multBlockSize) {
- startNum = 0;
- while (startNum + multBlockSize <= resultFloat.size()) {
- multBlockValue = 1;
- for (int i = startNum ; i < startNum + multBlockSize ; i++) {
- multBlockValue *= resultFloat.at(i);
- }
- for (int i = startNum + multBlockSize ; i < resultFloat.size() ; i++ ) {
- result.insert(multBlockValue * resultFloat.at(i));
- }
- startNum++;
- }
- multBlockSize++;
- }
- for ( int i = 0 ; i < resultFloat.size() ; i++ ) {
- result.insert(resultFloat.at(i));
- }
- ///////// Output
- int maxCount = 4;
- int currentNumber = 0;
- for (--(ik = result.end()); ik != result.begin(); --ik)
- {
- if (currentNumber < maxCount)
- {
- std::cout << *ik << endl;
- currentNumber++;
- }
- else
- {
- cout << "Continue generate? (Y/N)" << endl;
- string confirm;
- cin >> confirm;
- if (confirm == "Y")
- {
- currentNumber = 0;
- ik++;
- }
- else if (confirm == "N")
- {
- break;
- }
- else
- {
- cout << "Incorrect input, fucking trash !!" << endl;
- ik++;
- }
- }
- }
- }
- };
- int main(int argc, const char * argv[]) {
- FloatGenerator firstGenerator;
- firstGenerator.SetGenereator();
- firstGenerator.GeneratorA();
- firstGenerator.GeneratorB();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement