C++:尋找雙色球出現概率最大的號碼
阿新 • • 發佈:2018-12-12
前文程式碼太多,加之這會用C++寫,於是另開一篇。 事無完備,但可說服自己,索性寫了點程式碼,把幾支雙色球出現概率最大的號碼提取出來,也方便大家參考。 直接程式碼:
//string 轉 int void str2int(int &int_temp, const string &string_temp) { stringstream stream(string_temp); stream >> int_temp; } //執行主函式,標頭檔案按需要新增 int main() { vector<int>possible_data; ifstream fin("D:\\Cat_Dog_CNN\\mydata3.csv"); //開啟檔案流操作,即檔案路徑 string line; vector<vector<int>> datafromfile; // 讀檔案,將檔案資料儲存到本地 while (getline(fin, line)) //整行讀取,換行符“\n”區分,遇到檔案尾標誌eof終止讀取 { istringstream sin(line); //將整行字串line讀入到字串流istringstream中 vector<int> fields; //按行儲存 string field; while (getline(sin, field, ',')) //將字串流sin中的字元讀入到field字串中,以逗號為分隔符 { int temp; str2int(temp, field); fields.push_back(temp); //將剛剛讀取的字串改為int 型,新增到向量fields中 } datafromfile.push_back(fields); } fin.close();//關閉檔案 for (int j = 0; j < 6; j++)//1支,每次只提取第i支的出現情況 { map<int, int>mydata; map<int, int>::iterator iter; vector<int>sum; for (int i = 0; i < datafromfile.size(); i++) { int temp = datafromfile[i][j]; iter = mydata.find(temp); if (iter != mydata.end())//原map已經有該資料,直接count+1 { (iter->second)++; } else//沒有,則新增 { mydata.insert(map<int, int>::value_type(temp, 0)); } } map<int, int>::iterator iter_sum;//這句話可要可不要,迭代器一個就夠了 for (iter_sum = mydata.begin(); iter_sum != mydata.end(); iter_sum++) { sum.push_back(iter_sum->second); } int max = *max_element(sum.begin(), sum.end());//出現次數最大的數字,在map裡是second iter = mydata.find(max); for (iter = mydata.begin(); iter != mydata.end(); iter++)//遍歷map,查詢value值對應的ID,此ID即為號碼 { if ((iter->second) == max) { possible_data.push_back(iter->first); } } mydata.clear(); sum.clear(); } cout << possible_data[0] << endl;
這個結果期待不期待。
遊戲還好,切勿當真。