无聊的国庆,总得做点什么好玩的是不是,那就写代码获取大乐透,让后按照自己的算法推测下一期的结果吧。

话不多说,上代码

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共用)相关推荐

  1. java获取大乐透开奖_java生成大乐透中奖号码

    这段时间吃完饭都会来一两注大乐透! 然后心血来潮的用java写了个简单的随机生成大乐透号码 先晒代码: public class RandomUtil { //前区1-35个号码 private st ...

  2. 纯手工采用java编写双色球、大乐透随机生成算法,真实模拟出球

    纯java原生态模拟双色球.大乐透规则进行出球,原理:比如双色球,红球33.蓝球16个,先进行红球出球计算,按照双色球出球的规则随机将33个球放入数组或集合中,规定一个出球的方向,随机数12个绑定33 ...

  3. 大乐透python预测程序_Python生成随机验证码,大乐透号码

    随机生成验证码 示例代码: import random # 导入标准模块中的random if __name__ == '__main__': check_code = "" # ...

  4. Python实现彩票双色球、大乐透随机预测出号

    彩票要是能通过预测都能拿奖,那也是需要攒多少人品才行呀 老老实实做好事,多积德行善,做公益 近期出差的时候,闲来没事,下班路过彩站每天都顺便买一张彩票. 同时,就引发了对所学专业的应激反应,想了一下能 ...

  5. Python脚本抓取大乐透开奖结果核对定投号码邮件通知

    最近学习了一下Python的基础,想写个东西练练手.正好每次跟号的大乐透还需要手动兑奖或者去彩票站兑奖,自己写一个脚本自动抓取开奖结果,核对开奖金额后邮件通知. 整体思路: 找可抓取开奖结果网站 找可 ...

  6. 大乐透号码随机生成(仅供参考学习)

    import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random ...

  7. 自己编一个大乐透选号器

    新手,最近自己尝试着做了一个体彩大乐透的选号器,感觉挺有意思的,下面分享给大家! 具体步骤: 1.新建一个基于对话框的MFC工程. 2.按下图所示添加显示前区号码的5个编辑框,显示后区号码的2个编辑框 ...

  8. python大乐透号码生成器_国庆长假写了个体彩大乐透彩票号码生成器小程序

    国庆假期,除了带娃,就是回复客人和工厂邮件,还有看书了. 带娃大家都懂得,惨绝人寰,(好吧,女儿还是挺可爱的,但是精力太充沛了,自愧不如啊)比起来工作和看书就是天堂了... 不过假期有点长,后面几天思 ...

  9. ---------------------------SQL之机选大乐透,双色球算法-----------------------------

    ----------大乐透-------------------- if object_id('Front') is not null drop table Front go create table ...

  10. php计算大乐透与双色球彩票算法

    //调用public function index(){ $this->dlt(); //大乐透echo '<br><br><br><br>< ...

最新文章

  1. nVIDIA显卡命名规律
  2. Exchange与ADFS单点登录 PART 3:部署和配置WAP
  3. rabbitmq中消息的存储
  4. git 拉取远端仓库_git 从远程仓库拉取代码
  5. Ubuntu文件上锁了,怎么打开???亲测有效
  6. javascript-各种取值的操作-样式操作
  7. python按照区间长度给定不同数量的随机数
  8. 子文件夹的权限统一于E盘的权限
  9. 记号(notation)的学习
  10. 怎么查计算机二级证书到没到学校,今年3月份考的全国计算机二级,结果忘记去领证书了,我是在城建学院考的,还会给我留着吗?这证书能补办吗...
  11. python 操作进程_python进程简单操作
  12. linux文件目录加密,适用于Linux的10款最佳文件和磁盘加密工具
  13. STM32WL开发之LORA产品选型
  14. 谷歌浏览器html播放音乐,谷歌浏览器听歌插件:用Listen1听歌超方便!‖干货大放送...
  15. [打印管理器]读取样式列表失败:Invalid variant operation
  16. 去马赛克的频域方法(可抗混叠)
  17. python追加写_python覆盖写入,追加写入的实例
  18. Android 原生系统设置修改Preference样式
  19. 拼多多数据分析笔试题(附代码答案)
  20. 企微有客户流失提醒功能吗?如何设置?

热门文章

  1. python开发工程师招聘要求
  2. Python 灰帽子笔记之调试器
  3. Java8 - 使用 Comparator.comparing 进行排序
  4. hutool SpringUtil.getBean() NullPointerException
  5. 大数据可视化--全球分布散点图
  6. 和平精英小程序服务器开小差,1个BUG存在了4年 光子通过小提示说出了无法修复的原因...
  7. 排除美颜相机等第三方相机直接调用系统相机处理方法
  8. 微信8.0.3:做重了群公告,再也不能@所有人了!
  9. 借了你的爱,用我一辈子来还
  10. 微信开发验证php,解析微信公众平台开发之验证步骤实例(PHP版)