一个小把戏算法,获取大乐透,并且计算出最佳的结果(Qt C++ 和Android共用)
无聊的国庆,总得做点什么好玩的是不是,那就写代码获取大乐透,让后按照自己的算法推测下一期的结果吧。
话不多说,上代码
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);initDataBase();auto db = QSqlDatabase::database();if(db.isValid()){QSqlTableModel *model = new QSqlTableModel(this);model->setTable(his_tb_name);model->setSort(0,Qt::DescendingOrder);model->select();model->setHeaderData(0, Qt::Horizontal, tr("期号"));model->setHeaderData(1, Qt::Horizontal, tr("号码"));model->setHeaderData(2, Qt::Horizontal, tr("开奖日期"));ui->tableView->setModel(model);ui->tableView->resizeColumnsToContents();Log(" model db tables "<<model->database().tables());}connect(this,&Widget::finishedCurrentPage,this,&Widget::onCurrentPageFinished,Qt::QueuedConnection);initialChat();addLog(QSysInfo::buildAbi());
}
上述代码的作用就是UI入口,主要是创建的sqlite数据库,然后显示最近获取的期号数据
void initDataBase()
{QString log;auto db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("./lotus.db");auto ret = db.open();log.append(QString("open db ")+ (ret?" ok ":"error"+db.lastError().text()));auto tables = db.tables();if(!tables.contains(his_tb_name)){QString sql =QString("create table %1 (%2 text PRIMARY KEY NOT NULL, %3 text,%4 text);").arg(his_tb_name).arg(Serial_No).arg(front_no).arg(end_no);auto retsql = db.exec(sql);log.append( " \n create table "+db.lastError().text());}qDebug()<<" log "<<log;
}
上述代码和名字一致,主要是创建了sqlite和对应的表。
const QString lotusUrl ="https://webapi.sporttery.cn/gateway/lottery/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=100&isVerify=1&pageNo=%1";const QString end_no ="End_No";
const QString Serial_No ="Serial_No";
const QString front_no ="Front_No";
需要使用的常量,主要是后需要http请求获取彩票数据,然后是表头等
void Widget::getCurrentPageData()
{auto mng = manager();QUrl url(lotusUrl.arg(currentPage));auto reply = mng->get(QNetworkRequest(url));connect(reply,&QNetworkReply::finished,this,&Widget::handleReply,Qt::QueuedConnection);
}void Widget::handleReply()
{auto reply = dynamic_cast<QNetworkReply*>(sender());auto json = reply->readAll();auto doc = QJsonDocument::fromJson(json);if(doc.isNull()){Log(" empty json "<<json<<reply->errorString());return ;}auto value = doc.object().value("value").toObject();auto db = QSqlDatabase::database();qDebug()<<" tables "<<db.tables();QSqlQuery query(db);query.prepare(QString("insert into %1 values(?,?,?)").arg(his_tb_name));auto records = value.value("list").toArray();QVariantList serials;QVariantList frontnumbers;QVariantList endNumbers;QDate minDate;QDate maxDate;for(auto record : records){auto dateString = record.toObject().value("lotteryDrawTime").toString();auto tmpDate = QDate::fromString(dateString,Qt::ISODate);if(!minDate.isValid()){minDate = tmpDate;}if(!maxDate.isValid()){maxDate = tmpDate;}if(maxDate<tmpDate){maxDate = tmpDate;}if(minDate>tmpDate){minDate = tmpDate;}qDebug()<<" date "<<tmpDate;if(this->isExist(dateString)){qDebug()<<" has exists!";continue;}endNumbers<<dateString;serials<<record.toObject().value("lotteryDrawNum").toString();frontnumbers<<record.toObject().value("lotteryDrawResult").toString();}query.addBindValue(serials);query.addBindValue(frontnumbers);query.addBindValue(endNumbers);qDebug()<<" from "<<minDate <<" to "<<maxDate;if(this->fromDate.isNull() || this->fromDate >minDate){this->fromDate = minDate;}if(this->toDate.isNull() || this->toDate< maxDate){this->toDate = maxDate;}if(!query.execBatch()){qDebug()<<" exe error "<<query.lastError().text()<<" serial "<<serials.size()<<" front "<<frontnumbers.size()<<" end "<<endNumbers.size()<<" query "<<query.lastQuery();}qDebug()<<" exe end ";emit finishedCurrentPage();reply->deleteLater();
}
主要用于获取当前页面对应的彩票号码,插入到数据库;中间去重;每次都活获取单页网页数据,后续需要继续下一页还是停止,由UI上的天数决定。
这里省略掉关于统计的代码,很简单,就是便利数据库,把所有的数据全部统计一次,后面计算最佳的时候使用到。
所以界面需要先 刷新,按统计,再按最佳
void Widget::on_bestBtn_clicked()
{if(lastEnds.isEmpty() || lastFronts.isEmpty()){on_CalculateBtn_clicked();}ui->toolBox->setCurrentIndex(2);ValueList fronts = convertMapToList(this->lastFronts);ValueList ends = convertMapToList(this->lastEnds);// get maxauto theMax = [](const ValuePair&left,const ValuePair&right ){return left.second>right.second;};std::stable_sort(fronts.begin(),fronts.end(),theMax);std::stable_sort(ends.begin(),ends.end(),theMax);qDebug()<<" fronts "<<fronts<<"\n ends "<<ends;//max teamQStringList maxValues;for(short i=0;i<5;++i){auto value =fronts.at(i).first;maxValues<< QString::number(value);}for(short i=0;i<2;++i){auto value =ends.at(i).first;maxValues<< QString::number(value);}//min teamQStringList minValues;for(short i=0;i<5;++i){auto value =fronts.at(fronts.size()-i-1).first;minValues<< QString::number(value);}for(short i=0;i<2;++i){auto value =ends.at(ends.size()-i-1).first;minValues<< QString::number(value);}//middle teamQStringList middleValues;short frontdiff = fronts.size()/3+1;short endDiff = ends.size()/3+1;for(short i=0;i<5;++i){auto value =fronts.at(frontdiff+i).first;middleValues<< QString::number(value);}for(short i=0;i<2;++i){auto value =ends.at(endDiff+i).first;middleValues<< QString::number(value);}auto isValueSmaller = [](const QString &left,const QString&right){return left.toShort()<right.toShort();};std::stable_sort(maxValues.begin(),maxValues.end()-2,isValueSmaller);std::stable_sort(minValues.begin(),minValues.end()-2,isValueSmaller);std::stable_sort(middleValues.begin(),middleValues.end()-2,isValueSmaller);QString result = QDateTime::currentDateTime().toString();result+=QString("根据玄学推断,下一期开奖结果是:\n");result+="\n 最大期望 "+maxValues.join(" -- ");result+="\n 最小期望 "+minValues.join(" -- ");result+="\n 中间期望 "+ middleValues.join(" -- ");addLog(result);}
上述代码就是彩票计算;
lastFronts是通过点击计算按钮开始统计最近的前区号码(1-35)的出现的频次;
lastEnds对应后区(1-12);
通过统计结果进行排序,分别统计出最高频率组,最低频率组,和中间频率组,这三组结果就是下一期推测(哈哈,纯属搞笑的)
注意,stable_sort是为了保证不同平台的一致性结果;结果测试,如果使用sort函数,Android和我window结果在顺序相同的时候,排序结果不一致;Android在排序过程中把顺序打乱了,因此需要使用稳定排序;
我的代码是基于Qt 6.3可以编译,Android的话需要自己配置,我是用的是33 API;项目使用的是qmake的pro,因为目前qt的6.3还不能很好的支持cmake Android编译,暂时只能这样子;项目中需要网络请求,所以使用了ssl工程,这个是qt的文档说的。事实上也是这样子。下面附上Qt配置Android的环境截图,需要自己搞定 jdk,Android ndk和sdk
后面是我的代码和打包的程序,包括window 11的exe和Android 12能够运行的app
window程序界面
Android app界面
以下是资源链接:
lotus源码和app-C++文档类资源-CSDN下载
一个小把戏算法,获取大乐透,并且计算出最佳的结果(Qt C++ 和Android共用)相关推荐
- java获取大乐透开奖_java生成大乐透中奖号码
这段时间吃完饭都会来一两注大乐透! 然后心血来潮的用java写了个简单的随机生成大乐透号码 先晒代码: public class RandomUtil { //前区1-35个号码 private st ...
- 纯手工采用java编写双色球、大乐透随机生成算法,真实模拟出球
纯java原生态模拟双色球.大乐透规则进行出球,原理:比如双色球,红球33.蓝球16个,先进行红球出球计算,按照双色球出球的规则随机将33个球放入数组或集合中,规定一个出球的方向,随机数12个绑定33 ...
- 大乐透python预测程序_Python生成随机验证码,大乐透号码
随机生成验证码 示例代码: import random # 导入标准模块中的random if __name__ == '__main__': check_code = "" # ...
- Python实现彩票双色球、大乐透随机预测出号
彩票要是能通过预测都能拿奖,那也是需要攒多少人品才行呀 老老实实做好事,多积德行善,做公益 近期出差的时候,闲来没事,下班路过彩站每天都顺便买一张彩票. 同时,就引发了对所学专业的应激反应,想了一下能 ...
- Python脚本抓取大乐透开奖结果核对定投号码邮件通知
最近学习了一下Python的基础,想写个东西练练手.正好每次跟号的大乐透还需要手动兑奖或者去彩票站兑奖,自己写一个脚本自动抓取开奖结果,核对开奖金额后邮件通知. 整体思路: 找可抓取开奖结果网站 找可 ...
- 大乐透号码随机生成(仅供参考学习)
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random ...
- 自己编一个大乐透选号器
新手,最近自己尝试着做了一个体彩大乐透的选号器,感觉挺有意思的,下面分享给大家! 具体步骤: 1.新建一个基于对话框的MFC工程. 2.按下图所示添加显示前区号码的5个编辑框,显示后区号码的2个编辑框 ...
- python大乐透号码生成器_国庆长假写了个体彩大乐透彩票号码生成器小程序
国庆假期,除了带娃,就是回复客人和工厂邮件,还有看书了. 带娃大家都懂得,惨绝人寰,(好吧,女儿还是挺可爱的,但是精力太充沛了,自愧不如啊)比起来工作和看书就是天堂了... 不过假期有点长,后面几天思 ...
- ---------------------------SQL之机选大乐透,双色球算法-----------------------------
----------大乐透-------------------- if object_id('Front') is not null drop table Front go create table ...
- php计算大乐透与双色球彩票算法
//调用public function index(){ $this->dlt(); //大乐透echo '<br><br><br><br>< ...
最新文章
- nVIDIA显卡命名规律
- Exchange与ADFS单点登录 PART 3:部署和配置WAP
- rabbitmq中消息的存储
- git 拉取远端仓库_git 从远程仓库拉取代码
- Ubuntu文件上锁了,怎么打开???亲测有效
- javascript-各种取值的操作-样式操作
- python按照区间长度给定不同数量的随机数
- 子文件夹的权限统一于E盘的权限
- 记号(notation)的学习
- 怎么查计算机二级证书到没到学校,今年3月份考的全国计算机二级,结果忘记去领证书了,我是在城建学院考的,还会给我留着吗?这证书能补办吗...
- python 操作进程_python进程简单操作
- linux文件目录加密,适用于Linux的10款最佳文件和磁盘加密工具
- STM32WL开发之LORA产品选型
- 谷歌浏览器html播放音乐,谷歌浏览器听歌插件:用Listen1听歌超方便!‖干货大放送...
- [打印管理器]读取样式列表失败:Invalid variant operation
- 去马赛克的频域方法(可抗混叠)
- python追加写_python覆盖写入,追加写入的实例
- Android 原生系统设置修改Preference样式
- 拼多多数据分析笔试题(附代码答案)
- 企微有客户流失提醒功能吗?如何设置?
热门文章
- python开发工程师招聘要求
- Python 灰帽子笔记之调试器
- Java8 - 使用 Comparator.comparing 进行排序
- hutool SpringUtil.getBean() NullPointerException
- 大数据可视化--全球分布散点图
- 和平精英小程序服务器开小差,1个BUG存在了4年 光子通过小提示说出了无法修复的原因...
- 排除美颜相机等第三方相机直接调用系统相机处理方法
- 微信8.0.3:做重了群公告,再也不能@所有人了!
- 借了你的爱,用我一辈子来还
- 微信开发验证php,解析微信公众平台开发之验证步骤实例(PHP版)