//--------------------------------------------------------------- // class: guess.cpp //--------------------------------------------------------------- #include #include #include #include double eval(int *pj); class RandomGuess { public: RandomGuess(int); void cycledResults(); void cycledDetailResults(); void setVec(int); //set num 1's from beginning of vec void randomSetVec(int); //randomly set num 1's to vec void display(); //display the value and sequence void saveVec(int *); //save the sequence void guess101_v0_v9(int ); //guess the 101/maximum sequence void guess101_v50_v99(int ); //guess the 101/maximum sequence void guess101_i_j_k_in_v50_v99(); //guess the 101/maximum sequence void guess101_v50_v99_wildly(int); //guess the 101/maximum sequence void guess101_v50_v99_wildly(); //guess the 101/maximum sequence private: int numOnes; //number of 1's in vec[100] int vec[200]; //vec[100] repeat in vec[100::199]--for efficiency int maxValue; int maxValuedVec[100]; }; RandomGuess::RandomGuess(int n) { int i; for (i = 0; i < 200; i++) vec[i] = 0; for (i = 0; i < 100; i++) maxValuedVec[i] = 0; maxValue = 0; numOnes = n; srand(time(0)); setVec(n); } void RandomGuess::setVec(int num) { int i, k; if (num == 0) { for (i = 0; i < 200; i++) vec[i] = 0; return; } for (i = 0; i < num; i++) vec[i] = 1; for (i = 0; i < 100; i++) vec[100 + i] = vec[i]; return; } void RandomGuess::randomSetVec(int num) { int i, k; if (num == 0) { for (i = 0; i < 200; i++) vec[i] = 0; return; } for (i = 0; i < 100; i++) vec[i] = 0; for (i = 0; i < num; i++) { k = rand() % 100; vec[k] = 1; } for (i = 0; i < 100; i++) vec[100 + i] = vec[i]; return; } void RandomGuess::cycledResults() { int i; for (i = 0; i < 100; i++) cout< maxValue) { maxValue = value; saveVec(vec); display(); } for (j = 0; j < xN; j++) vec[i + j] = 0; } return; } //suppose number (xN) of 1 in vec[50::99] void RandomGuess::guess101_v50_v99(int xN) { int i, j, value; //vec[10::49] = 1; others = 0 for (i = 0; i < 100; i++) vec[i] = 0; for (i = 10; i < 50; i++) vec[i] = 1; //initialize maxValue = (int) eval(&vec[0]); saveVec(vec); display(); //guess for (i = 50; i <= 100 - xN; i++) { for (j = 0; j < xN; j++) vec[i + j] = 1; value = (int) eval(&vec[0]); if (value > maxValue) { maxValue = value; saveVec(vec); display(); } for (j = 0; j < xN; j++) vec[i + j] = 0; } return; } //given number (xN) of 1's in vec[50::99] //guess wildly void RandomGuess::guess101_v50_v99_wildly(int xN) { int i, j, value; //vec[10::49] = 1; others = 0 for (i = 0; i < 100; i++) vec[i] = 0; for (i = 10; i < 50; i++) vec[i] = 1; //initialize maxValue = (int) eval(&vec[0]); saveVec(vec); display(); //guess while (1) { //loop forever!! for (i = 0; i < xN; i++) { j = rand() % 50; //cout<<"j = "< maxValue) { maxValue = value; saveVec(vec); display(); } for (j = 50; j < 100; j++) vec[j] = 0; } return; } //given random number of 1's in vec[50::99] //guess wildly void RandomGuess::guess101_v50_v99_wildly() { int i, j, value, xN; //vec[10::49] = 1; others = 0 for (i = 0; i < 100; i++) vec[i] = 0; for (i = 10; i < 50; i++) vec[i] = 1; //initialize maxValue = (int) eval(&vec[0]); saveVec(vec); display(); xN = rand() % 49 + 1; //guess while (1) { //loop forever!! for (i = 0; i < xN; i++) { j = rand() % 50; //cout<<"j = "< maxValue) { maxValue = value; saveVec(vec); display(); } //1-0-1 for i-j-k for (m = 50; m <= i; m++) vec[m] = 1; for (m = i + 1; m <= j; m++) vec[m] = 0; for (m = j + 1; m <= 99; m++) vec[m] = 1; value = (int) eval(&vec[0]); if (value > maxValue) { maxValue = value; saveVec(vec); display(); } } // cout <<"k = "< double eval(int *pj); int main() { int vec[100]; int i,j; for(i = 0; i < 100; i++){ vec[i] = 0; } for(i = 0; i < 45; i++){ vec[i] = 1; } cout <<"i = "<