看板 C_and_CPP 關於我們 聯絡資訊
不曉得這個版會不會有人參加這樣的趣味競賽。 如果這樣能幫到原po的忙的話... GuessNumberAI.h http://codepad.org/pPM6p5ki ======================================== #pragma once #include <fstream> #include <iomanip> class GuessNumberAI { public: GuessNumberAI() { std::fstream fout("./my_guess_number_score.txt", std::ios::out); for(int i = 1; i <= 20; ++i) { guess_times[i] = 0; } for(int r = 0; r < 1000; ++r) { for(int i = 123; i < 10000; ++i) { char g[5]; g[0] = (i / 1000) + '0'; g[1] = ((i % 1000) / 100) + '0'; g[2] = ((i % 100) / 10) + '0'; g[3] = (i % 10) + '0'; g[4] = '\0'; if(g[0] == g[1] || g[0] == g[2] || g[0] == g[3] || g[1] == g[2] || g[1] == g[3] || g[2] == g[3]) { continue; } std::string str(g); int t = algorithm(str); if(t <= 0 || t > 20) { fout << "you are too weak, out!" << std::endl; return; } ++guess_times[t]; } } int width = 0; for(int i = 1; i <= 20; ++i) { if(guess_times[i] > 0) { int tmp = guess_times[i]; int w = 0; while(tmp > 0) { tmp /= 10; ++w; } width = width < w ? w : width; } } for(int i = 1; i <= 20; ++i) { fout << std::setw(width + 1) << std::right << i; } fout << std::endl; for(int i = 1; i <= 20; ++i) { fout << std::setw(width + 1) << guess_times[i]; } fout << std::endl; fout.close(); } ~GuessNumberAI() {} int algorithm(const std::string& guess_str); private: int guess_times[21]; }; GuessNumberAI.cpp http://codepad.org/cj6FK9Nz ==================================================== #include "GuessNumberAI.h" int GuessNumberAI::algorithm(const std::string& guess_str) { } int main() { GuessNumberAI app; return 0; } 想玩的人可以在algorithm()裡創造自己的演算法。 guess_str長度為4,從 0123 ~ 9876,跑1000圈。 編譯會錯,因為algorithm()等待你的return猜測次數。 只要有一次可能猜超過20次就直接out了。 my_guess_number_score.txt就是你的成績。 ※ 引述《SocketAM2 (AM2)》之銘言: : 前陣子在python版看到有人討論到這個當年煞到我的遊戲, : 一下子熱血舊夢又被重燃... : 我還算有能力把我手上的想法用C弄出來, : 幾個程式設計相關的板這裡也算是人氣較旺, : 來這裡搞搞看有沒有人願意一起來玩玩瘋瘋 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.177.97
SocketAM2:對於非隨機性的算法1234~9876一圈足矣,要稍修一下 09/22 09:43
SocketAM2:中間的r做成call時傳入的引值讓使用者可以改 09/22 09:44
SocketAM2:一些較複雜的非隨機算法跑一圈有可能會超過十分鐘 09/22 09:46