C++趣味练习:模拟做个3D福彩系统,亏钱还是赚钱

今天写个适合C++初学者练习的程序,模拟做个3D福彩系统,看看亏钱还是赚钱
当然我们这里都是假设,而且规则和真实的3D彩票不一样的,
仅供学习和娱乐。

一、程序逻辑与步骤

这里把这个3D福彩系统的编写逻辑与步骤写一下,
因为我们是模拟是赚钱还是亏钱,所以就不写彩票的买入,
而是直接生成一堆彩票信息,
再生成中奖号码,看看是否可以盈利。

步骤如下:
1.生成10000组随机的彩票号码

这一过程练习,C++随机数的生成

2.将生成的号码保存到文件中;

练习C++文件的写入方法

3.统计所有号码的次数

理解桶排序的原理

4.找出出现次数最少的数字,并放入新数组

练习动态数组的使用,
这一功能有啥用自己想

5.统计输出所有的信息

练习关于格式化输入的部分知识点

二、3D彩票开奖各步骤的编写

1. 生成随机的数字

使用过python生成随机数字的方法,
再使用C++真是很麻烦

1)python 版本的

import random
n = random.randint(0,1000)

2)C++ 98版本的

//头文件
#include <random>
#include <ctime> 
//生成0~1000的随机数
srand(time(0));
int a = rand()%1000;

3)C++ 11版本的

random_device rd;
mt19937 gen(rd()); 
uniform_int_distribution<> distrib(0,999);
int a = distrib(gen); 

如果看不懂,就经常用几次,之后就慢慢会了,开始不必强求要理解每一行,
即使是详细讲解,也是稍微理解个毛,连皮都看不到。
(好奇就让AI讲一下,看你能不能懂)

2. 将生成的号码保存到文件中

1)导入头文件

#include <fstream>

2)建立保存的文件

这两个名可变:outfile 是变量名,123.txt是文件名

ofstream outfile("123.txt");

3)将数据保存到文件中

从C++程序的角度,保存到文件中,相当于输出

int a = rand()%1000;
outfile  << a << endl;

4)优化上一步的数据,按三位数的格式保存

如整数3,以”003″保存到文件中

int a = rand()%1000;
outfile << setw(3) << setfill('0') << a << endl;

5)关闭文件

使用完文件随手关闭

outfile.close();

3.动态数组

建立一个动态数组,保存数量最少的数字

1)定义动态数组

vector<int> nums_min;

2)向数组结尾添加数字

nums_min.push_back(i)

三 源代码

代码写完后,先运行试试,再看

#include <iostream>
#include <random>
#include <fstream> 
#include <iomanip>
#include <vector>
#include <ctime> 
using namespace std;

int main(){
	srand(time(0));
    
    ofstream outfile("123.txt");
    if (!outfile.is_open()){
        cerr << "打开错误!";
        return 1;
    }
    
    // 数组大小为 1000,用来统计 0-999 每个数字出现的次数
    int nums[1000] = {0}; 
    
    // 生成 10000 个随机数
    for (int i = 0; i < 10000; i++){
        int a = rand()%1000;
        outfile << setw(3) << setfill('0') << a << endl;
        nums[a]++; // 对应数字的计数器加 1
    }
    outfile.close(); // 记得关闭文件
    
    // 1. 找出最小的出现次数
    int min_n = 10001; // 初始值设为比最大可能次数(10000)大一点
    
    for (int i = 0; i < 1000; i++){
        if (nums[i] < min_n){
            min_n = nums[i];
        }
    }
    
    vector<int> nums_min;
    
    for (int i = 0; i < 1000; i++){
        if (nums[i] == min_n){
            nums_min.push_back(i); 
        }
    }   
    
    cout << "最小出现次数为: " << min_n << endl;
    cout << "出现次数最少的数字有: ";
    for (int num : nums_min){
        cout << num << " ";
    }
    cout << endl;
	
	int b = rand()%1000;
	cout << "中奖号码:" << b << endl;
	cout << "中奖人数:" << nums[b] << endl;
	cout << "奖金:" << nums[b]*1000 << endl;	
	cout << "盈利:" << 20000-nums[b]*1000 << endl; 
    return 0;
}
C++

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注