1. 程式人生 > >C++:尋找雙色球出現概率最大的號碼

C++:尋找雙色球出現概率最大的號碼

前文程式碼太多,加之這會用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;

這個結果期待不期待。

在這裡插入圖片描述

遊戲還好,切勿當真。