游戏规则
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;
}
奇牛学院