2015-04-18 28 views
-2

尋找一些幫助我解決我的問題。 我需要打印一對具​​有用戶輸入的域和共域的所有關係。打印一對套之間的所有關係

例如,如果輸入是「AB」和「ABC」關係的相應列表將是:

0: {} 
1: {(a, a), } 
2: {(a, b), } 
3: {(a, a), (a, b), } 
4: {(a, c), } 
5: {(a, a), (a, c), } 
6: {(a, b), (a, c), } 
7: {(a, a), (a, b), (a, c), } 
8: {(b, a), } 
9: {(a, a), (b, a), } 
10: {(a, b), (b, a), } 
11: {(a, a), (a, b), (b, a), } 
12: {(a, c), (b, a), } 
13: {(a, a), (a, c), (b, a), } 
14: {(a, b), (a, c), (b, a), } 
15: {(a, a), (a, b), (a, c), (b, a), } 
16: {(b, b), } 
17: {(a, a), (b, b), } 
18: {(a, b), (b, b), } 
19: {(a, a), (a, b), (b, b), } 
20: {(a, c), (b, b), } 
21: {(a, a), (a, c), (b, b), } 
22: {(a, b), (a, c), (b, b), } 
23: {(a, a), (a, b), (a, c), (b, b), } 
24: {(b, a), (b, b), } 
25: {(a, a), (b, a), (b, b), } 
26: {(a, b), (b, a), (b, b), } 
27: {(a, a), (a, b), (b, a), (b, b), } 
28: {(a, c), (b, a), (b, b), } 
29: {(a, a), (a, c), (b, a), (b, b), } 
30: {(a, b), (a, c), (b, a), (b, b), } 
31: {(a, a), (a, b), (a, c), (b, a), (b, b), } 
32: {(b, c), } 
33: {(a, a), (b, c), } 
34: {(a, b), (b, c), } 
35: {(a, a), (a, b), (b, c), } 
36: {(a, c), (b, c), } 
37: {(a, a), (a, c), (b, c), } 
38: {(a, b), (a, c), (b, c), } 
39: {(a, a), (a, b), (a, c), (b, c), } 
40: {(b, a), (b, c), } 
41: {(a, a), (b, a), (b, c), } 
42: {(a, b), (b, a), (b, c), } 
43: {(a, a), (a, b), (b, a), (b, c), } 
44: {(a, c), (b, a), (b, c), } 
45: {(a, a), (a, c), (b, a), (b, c), } 
46: {(a, b), (a, c), (b, a), (b, c), } 
47: {(a, a), (a, b), (a, c), (b, a), (b, c), } 
48: {(b, b), (b, c), } 
49: {(a, a), (b, b), (b, c), } 
50: {(a, b), (b, b), (b, c), } 
51: {(a, a), (a, b), (b, b), (b, c), } 
52: {(a, c), (b, b), (b, c), } 
53: {(a, a), (a, c), (b, b), (b, c), } 
54: {(a, b), (a, c), (b, b), (b, c), } 
55: {(a, a), (a, b), (a, c), (b, b), (b, c), } 
56: {(b, a), (b, b), (b, c), } 
57: {(a, a), (b, a), (b, b), (b, c), } 
58: {(a, b), (b, a), (b, b), (b, c), } 
59: {(a, a), (a, b), (b, a), (b, b), (b, c), } 
60: {(a, c), (b, a), (b, b), (b, c), } 
61: {(a, a), (a, c), (b, a), (b, b), (b, c), } 
62: {(a, b), (a, c), (b, a), (b, b), (b, c), } 
63: {(a, a), (a, b), (a, c), (b, a), (b, b), (b, c), } 

元件的數量與式計算:

N_e =元素數目在最後名單中;

k和j =給定集合中元素的數量;

N_e = 2^{K *Ĵ}

+1

您嘗試過什麼嗎?沒有更具體的問題,你不會在這裏得到太多的幫助。或者任何問題... – evan

+2

你在這裏卡住了什麼,你到現在爲止嘗試過什麼 – Panther

+0

這是我的問題我甚至不知道從哪裏開始。 – user117911

回答

0

我想通了。

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <fstream> 
#include <vector> 
#include <sstream> 
#include <cmath> 
#include <iterator> 
#include <bitset> 
#include <limits> 
#include <algorithm> 
#include <gmpxx.h> 

using namespace std; 
void printVector(vector <string> inComing); 
long long calcElem(long long n1); 

void getList(vector <string> &answersList, vector <string> setList, long long nPossibleElements); 
void combineSets(vector <string> &setList, string set1, string set2); 


int main(){ 
    //initializing variables 
    int flag = 1; //flag for user input = 0; for build in string = 1 
    long long nPossibleElements = 0; 
    long long nSet2 = 0; 
    long long nTest1 = 0; 
    long long nTest2 = 0; 
    //string input, nInput; 
    string s_setA = { "abc" }, s_setB = {"ab"}; 
    vector <string> v_Answers, v_setA, v_setB, v_SetList; 

    if (flag == 0) 
    { 
     cout << "Enter set A (no spaces): "; 
     getline(cin, s_setA); 

     cout << "Enter set B (no spaces): "; 
     getline(cin, s_setB); 
    } 

    combineSets(v_SetList, s_setA, s_setB); 
    nPossibleElements = calcElem(s_setA.size()*s_setB.size()); 
    getList(v_Answers, v_SetList, nPossibleElements); 
    printVector(v_Answers); 

    cout << "Part2. Enter number of elements in sets(separated by space): "; 
    cin >> nTest1 >> nTest2; 

    cout << "The answer for |Domain| = " << nTest1 << " and |Codomain| = " << nTest2 << " is " << calcElem(nTest1* nTest2) << endl; 

} 

    //Prints out the vector elements 
void printVector(vector <string> inComing){ 

     for (size_t i = 0; i < inComing.size(); i++) 
     { 
      cout << i << ": " << inComing[i] << endl; 
     } 
    } 

     //function to calculate # of possible answers 
long long calcElem(long long n1) 
    { 
     long long temp = 2; 

     for (size_t index = 1; index < n1; index++) 
     { 
      temp *= 2; 
     } 

     return temp; 
    } 

     //Building answers combination 
void combineSets(vector <string> &tempSet, string set1, string set2) 
    { 

     for (size_t a = 0; a < set1.size(); a++) 
     { 
      for (size_t b = 0; b < set2.size(); b++) 
      { 
       stringstream temp; 
       temp << "(" << set1[a] << ", " << set2[b] << "), "; 
       tempSet.push_back(temp.str()); 
      } 
     } 
    } 

void getList(vector <string> &answersList, vector <string> setList, long long nPossibleElements) 
    { 
     for (size_t index = 0; index < nPossibleElements; index++) 
     { 
      string s = bitset<numeric_limits<unsigned long long>::digits>(index).to_string(); 
    string::size_type n = s.find('1'); 
    string temp; 

    if (n != string::npos) 
    { 
     temp = s.substr(n); 
     reverse(temp.begin(), temp.end()); 
    } 

    string tempString = "{"; 

    for (size_t elem = 0; elem < temp.size(); elem++) 
    { 
     if (temp[elem] == '1') 
     { 
      tempString.append(setList[elem]); 
     } 
    } 
    tempString.append("}"); 
    answersList.push_back(tempString); 
    } 
} 
0

不張貼的代碼,但這裏有一個可能的解決方案:

1)首先創建所有初級關係的數組.IE爲您的上面的輸入,這將是{(a,a), (a,b), (a,c), (b,a), (b,b), (b,c)}。將其存儲在二維數組中。

2)現在你所要做的就是打印出所有這些組合的所有nCr。 (1)可以使用兩個for循環和(2)你可以谷歌(或bing)一些算法來實現。

+0

是的,這就是我現在要做的。另外我注意到路徑遵循從0到00000001 00000010 00000011 00000100的二進制編號 – user117911

相關問題