C++ 双色球预测系统

  • Post author:
  • Post category:其他


游戏规则

1.“双色球”彩票投注区分为红色球号码区和蓝色球号码区。

2.“双色球”每注投注号码由 6 个红色球号码和 1 个蓝色球号码组成。红色球号码从 1–33

中选择;蓝色球号码从 1–16 中选择。


ball.txt

是我们每期存放的数据号,一共10期,每期7个号码,我们将数据写入到数组中,像类似这样的数据,我们一般都是用一维数组来存取,因为不确定完整性,无法定义其他维度,也不能确定长度,例如,某个数据丢失,磁盘问题导致的问题.

我们将数据存储到数组中,但是,存储方式也决定读取方式,要思考如何更好的便于操作管理,相信大家都会考虑,将我们每期的值直接保存成数组的值,然后,再进行数组的值操作统计,而我考虑的是将每期的每个号作为数组下标,并将数组的值全部初始为0,再通过遍历读取数据时每读个号,就将此号当做下标来存,例如:第一个数是8,我们8-1等于7,这个7就作为下标,为什么要 -1 操作,是因为数组下标是从0开始的.

int ball_16[33] = { 0 } 定义数组,下标 0 – 32代表 前6位的 1 – 33 号球,数组值全部初始0,当我们遍历数组第一个数是 8, 数组下标0开始,所以,要对8 – 1 操作, 将7做为数组下标: ball_16[ 7 ] = 0, 我们再通过循环遍历 到数组 下标是 7的时候 ,我们只需要为这个 下标是 7 的做+1操作,就可以统计多少期这个 8 出现多少次了, ball_16[ 7 ]  += 1.

实例:

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>

using namespace std;
#define NUM			7				// 7个球
#define SUM			33				// 1 - 33号球

bool statNum(const char* path, int ball_16[],int ball_16_r[], int len);

int main(void) {
	string filename;
	int ball_16[SUM] = { 0 };        //统计红球
	int ball_16_r[SUM] = { 0 };      //统计蓝球

	cout << "请输入文件名:\n";
	cin >> filename;

	if (statNum(filename.c_str(), ball_16,ball_16_r, SUM)) {

		cout << "红球统计:" << endl;
		for (int i = 0; i < SUM; i++) {
			cout << "第 " << setw(2) << i + 1 << " 球出现次数: " << ball_16[i] << endl;
		}

		cout << "蓝球统计:" << endl;
		for (int i = 0; i < SUM; i++) {
			cout << "第 " << setw(2) << i + 1 << " 球出现次数: " << ball_16_r[i] << endl;
		}
	}
	else {//统计出错
		cerr << "统计错误" << endl;
	}

	system("pause");
	return 0;
}

bool statNum(const char* path, int ball_16[], int ball_16_r[], int len) {
	int result[NUM] = { 0 };
	int i = 0;
	ifstream file;

	if (!path) {
		cerr << "文件名错误,请检查" << endl;
		return false;
	}

	file.open(path);

	if (file.fail()) {
		cerr << "文件打开失败,请检查" << strerror(errno) << endl;
		return false;
	}

	//读取数据到数组,一行7个球
	do {
		i = 0;
		for (i = 0; i < NUM; i++) {
			//将文件数据写入数组
			file >> result[i];

			//读取文件中字符,当遇到结束符EOF,也就是结尾时.
			if (file.eof()) {
				break;
			}

			if (file.fail()) {
				cerr << "文件读取失败,原因:" << strerror(errno) << endl;
				break;
			}
			//cout << " " << result[i] << endl;
		}		
		
		//开始定义i = 0; 到所有数据都读完后,file >> result[i]还会往下找
		//完全都完,i就会等于0,找不到数据

		if (i == 0)  break;
			
		//小于7个号码,报错,数据有问题
		if (i < NUM) {
			cerr << "仅读到" << i << "个记录,原因:" << strerror(errno) << endl;
			file.close();
			return false;
		}
			
		//成功的话,打印结果
		for (i = 0; i < NUM; i++) {
			cout << " " << result[i];
		}
		cout << endl;

		//对读入的数据进行统计,NUM - 1,统计红球
		for (i = 0; i < NUM - 1; i++) {
			int index = *(result + i) - 1;
			if (index >= 0 && index < len) {
				*(ball_16 + index) += 1;
				//(*(ball_16 + index))++;	//第二种写法
			}
		}

		//统计蓝球
		for (i = NUM - 1; i < NUM; i++) {
			int index = *(result + i) - 1;
			if (index >= 0 && index < len) {
				*(ball_16_r + index) += 1;
			}
		}

	} while (1);

	file.close();
	return true;
}

奇牛学院



版权声明:本文为oqqNd原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。