一个小把戏算法,获取大乐透,并且计算出最佳的结果(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下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20533.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算力军备竞赛白热化 “卖铲人”联想集团竞争力如何?

继微软通过OpenAI推出GPT系列、谷歌推出Bard和PaLM-E2之后&#xff0c;国内AI大模型也呈百家争鸣态势&#xff0c;年初至今&#xff0c;国内科技巨头几乎都发布了自研AI大模型产品&#xff0c;AI竞赛全面升级的背后&#xff0c;是全球科技巨头们对算力的争夺&#xff0c;作为算…

chatgpt赋能python:Python制图中如何添加文字

Python 制图中如何添加文字 介绍 制图通常不仅需要展示数据&#xff0c;还需要向读者传递信息。而添加文字是一种直接有效的方式&#xff0c;可以帮助读者更好地理解图表。 Python 图形库众多&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;它们都提供了向图表中…

【送书福利-第八期】《硅基物语.AI大爆炸: ChatGPT→AIGC→GPT-X→AGI进化→魔法时代→人类未来》

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 本文目录 一、前言二、内容介绍三、作者介…

算法工程师体验了一下chatGPT,已经上瘾了!

chatGPT持续刷屏&#xff0c;作为能写代码&#xff0c;能修bug的超级工具&#xff0c;CV君必须体验一把&#xff01; 首先来一个基本操作&#xff0c;让chatGPT写一段Python程序&#xff0c;使用YOLOv5对图像中的目标进行检测,找出有狗没有猫的图片&#xff1a; 对YOLOv5这种公…

还有人不懂 ChatGPT,不焦虑吗?(文末赠书)

&#xff0c;不 如果有一本书 可以让人理解“AI大爆炸”新纪元 那就是《碳基物语》 半年以来&#xff0c;ChatGPT点燃文明新火把 对AIGC和AGI的讨论也甚嚣尘上‍‍‍‍ AI会取代人类吗&#xff1f; 人工智能会拥有智慧吗&#xff1f; ChatGPT到底该怎么玩&#xff1f; 我该如何…

一想到还有95%的人不懂ChatGPT,我就焦虑了

如果有一本书 可以让人理解“AI大爆炸”新纪元 那就是《碳基物语》 半年以来&#xff0c;ChatGPT点燃文明新火把 对AIGC和AGI的讨论也甚嚣尘上‍‍‍‍ AI会取代人类吗&#xff1f; 人工智能会拥有智慧吗&#xff1f; ChatGPT到底该怎么玩&#xff1f; 我该如何利用AIGC提升生产…

5月书讯 | 《这就是ChatGPT》来了!

叮~又到了书讯时间&#xff0c;本月好书众多&#xff0c;姗姗来迟。 在这个数字化的时代&#xff0c;我们仍然相信纸质书的魅力&#xff0c;可以让人沉静下来&#xff0c;回归到阅读的本质。五月盛夏伊始&#xff0c;炎炎夏日&#xff0c;我们精心挑选了 10 本好书&#xff0c;…

通过AI的自白,开启ChatGPT学习之旅!

如果有一本书 可以让人理解“AI大爆炸”新纪元 那就是《碳基物语》 半年以来&#xff0c;ChatGPT点燃文明新火把 对AIGC和AGI的讨论也甚嚣尘上‍‍‍‍ AI会取代人类吗&#xff1f; 人工智能会拥有智慧吗&#xff1f; ChatGPT到底该怎么玩&#xff1f; 我该如何利用AIGC提升生产…

Anaconda安装的python环境中“No module named pip” 和 “ ‘pip‘ is a package and cannot be directly executed”问题

一. 没有pip3问题 找到安装anaconda的文件夹&#xff0c;点击Scripts(利用anaconda安装的python虚拟环境都在这里)&#xff0c;确定是否存在一个easy_install.exe的程序&#xff0c;如果有请往下看&#xff0c;如果没有进入直接进入第4步。 打开 Anaconda Prompt 或 cmd &…

chatgpt赋能python:Python.head()方法:介绍和使用

Python .head()方法&#xff1a;介绍和使用 在Python编程中&#xff0c;我们经常需要处理大型数据集。为了更好地理解和使用这些数据&#xff0c;我们需要查看开头部分的数据。在这种情况下&#xff0c;.head()方法是非常有用的。 什么是.head()方法&#xff1f; .head()方法…

用ChatGPT解析Wireshark抓取的数据包样例

用Wireshark抓取的数据包&#xff0c;常用于网络故障排查、分析和应用程序通信协议开发。其抓取的分组数据结果为底层数据&#xff0c;看起来比较困难&#xff0c;现在通过chatGPT大模型&#xff0c;可以将原始抓包信息数据提交给AI进行解析&#xff0c;本文即是进行尝试的样例…

如何利用ChatGPT实现推荐模型的能力?

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 无需翻墙&#xff0c;ChatGPT直接使用 万字干货&#xff1a;ChatGPT的工作原理 2023年创业&#xff08;有创业想法&#xff09;必读手册 ChatGPT等…

打造类ChatGPT,云知声的优势在哪?

在ChatGPT上线后&#xff0c;一些人认为它只是一个聊天的人工智能&#xff0c;但对于云知声等AI企业而言&#xff0c;已经把ChatGPT放在了向通用AI演进这样的级别来看待的&#xff0c;并着手打造ChatGPT医疗行业版&#xff0c;同时基于ChatGPT行业版构建平台&#xff0c;快速扩…

为什么我们要掌握Linux系统编程?

为什么我们要掌握Linux系统编程&#xff1f;&#xff08;文末送书4本&#xff09; 作为一个嵌入式开发者&#xff0c;我觉得基于Linux的系统编程&#xff0c;这个应该是绕不开的话题。本文将围绕&#xff0c;为何要掌握Linux系统编程这个问题&#xff0c;给出一些观点&#xff…

bing侧边栏打开没有聊天界面问题

# 问题描述 在网络代理工具设置为PAC模式下&#xff0c;侧边栏没有bing聊天功能&#xff0c;只有在全局模式下&#xff0c;侧边栏才可以使用bing聊天功能。 # 问题解决 在侧边栏聊天框点击鼠标右键&#xff0c;选择检查&#xff0c;弹出DevTools界面&#xff0c;点击到网络&a…

燕千云ChatGPT应用,用过的都说香

本期受访人物&#xff1a;张礼军 甄知科技联合创始人&#xff0c;CTO 首席产品官 2022年底&#xff0c;基于人工智能技术驱动的自然语言工具横空出世&#xff0c;一经推出&#xff0c;ChatGPT迅速火遍全球&#xff0c;几乎各行各业都在探索ChatGPT具体业务场景的应用&#xf…

金蝶云星空和金蝶云星空单据接口对接

金蝶云星空和金蝶云星空单据接口对接 接通系统&#xff1a;金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台。K/3Cloud支持的协同…

ChatGPT会颠覆it行业特别是软件工作者吗?

前言 作为一名软件工程师&#xff0c;我对ChatGPT 这种基于GPT-3.5 架构的大型语言模型充满了好奇和兴趣&#xff0c;ChatGPT的问答能力和语言处理能力也已经达到了惊人的高水平&#xff0c;这让人不禁想到&#xff0c;它是否有可能颠覆 IT 行业&#xff0c;特别是软件工作者的…

ChatGPT将要颠覆的前十个行业

ChatGPT将要颠覆的前十个行业 内容创作&#xff1a;ChatGPT可以生成高质量的文章、新闻和其他类型的文本内容&#xff0c;改变传统内容创作行业。在线客服&#xff1a;ChatGPT可以提供智能、高效的客户服务&#xff0c;改善用户体验&#xff0c;降低企业成本。教育领域&#xf…

领英创始人里德·霍夫曼退出OpenAI;微软推出多模态模型 Kosmos-1;谷歌推出PaLM-E...

本周AI产业界又有哪些新鲜事&#xff1f; ChatGPT 谷歌推出PaLM-E&#xff0c;机器人在5620 亿个参数模型上进行训练 谷歌和柏林工业大学研究人员本周推出一款机器人&#xff0c;该机器人在具有超过 5620 亿个参数的多模态视觉、语言模型上进行了训练。 PaLM-E模型集成了视觉和…