Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序
什么是约瑟夫环问题?
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。
分析:
(1)由于对于每个人只有死和活两种状态,因此可以用布尔型数组标记每个人的状态,可用true表示死,false表示活。
(2)开始时每个人都是活的,所以数组初值全部赋为false。
(3)模拟杀人过程,直到所有人都被杀死为止。
魔术
1、4张牌对折后撕开,就是8张,叠放在一起就是ABCDABCD。注意,ABCD四个数字是完全等价的。
2、根据名字字数,把顶上的牌放到下面,但怎么放都不会改变循环序列的相对位置。譬如2次,最后变成CDABCDAB;譬如3次,最后换成DABCDABC。但无论怎么操作,第4张和第8张牌都是一样的。
3、把顶上3张插到中间任意位置。这一步非常重要!因为操作完之后必然出现第1张和第8张牌是一样的!以名字两个字为例,可以写成BxxxxxxB(这里的x是其他和B不同的牌)。
4、拿掉顶上的牌放到一边,记为B。剩下的序列是xxxxxxB,一共7张牌。
5、南方人/北方人/不确定,分别拿顶上的1/2/3张牌插到中间,但是不会改变剩下7张牌是xxxxxxB的结果。
6、男生拿掉1张,女生拿掉2张。也就是男生剩下6张,女生剩下5张。分别是xxxxxB和xxxxB。
7、把最顶上的放到最底下,循环7次,男生和女生分别会是xxxxBx和xxBxx。
8、最后执行约瑟夫环过程!操作到最后只剩下1张。当牌数为6时(男生),剩下的就是第5张牌;当牌数为5时(女生),剩下的就是第3张牌。就是第4步拿掉的那张牌!










.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <vector>
#include "brand.h"
#include <QPushButton>
#include <QRadioButton>
#include <QLineEdit>
#include <QLayout>
#include <QStackedWidget>
#include <QSplitter>
#include <QButtonGroup>
class Step: public QWidget
{
public:Step(QWidget *parent = 0):QWidget(parent){QVBoxLayout* vbox = new QVBoxLayout(this);QHBoxLayout* hboxLabel = new QHBoxLayout;hboxChoose = new QHBoxLayout;QHBoxLayout* hboxBtn = new QHBoxLayout;label = new QLabel(this);hboxLabel->addStretch();hboxLabel->addWidget(label);hboxLabel->addStretch();hboxBtn->addStretch();vbox->addLayout(hboxLabel);vbox->addLayout(hboxChoose);vbox->addLayout(hboxBtn);}void SetText(QString text){label->setText(text);}QHBoxLayout* GetChooseLayout(){return hboxChoose;}virtual bool Check() {return true;}
private:QLabel* label;QHBoxLayout* hboxChoose;
};class Start: public Step
{
public:Start(QWidget *parent = 0):Step(parent){SetText("请输入四个数字、字母或汉字");edit = new QLineEdit(this);edit->setPlaceholderText("请输入四个数字、字母或汉字");GetChooseLayout()->addWidget(edit);}QString GetStr(){return edit->text();}bool Check() {return edit->text().size() == 4;}private:QLineEdit* edit;
};class First: public Step
{
public:First(QWidget *parent = 0):Step(parent){SetText("4张牌对折后撕开");}
};class Second: public Step
{
public:Second(QWidget *parent = 0):Step(parent){SetText("请输入您的名字");edit = new QLineEdit(this);edit->setPlaceholderText("请输入您的名字");GetChooseLayout()->addWidget(edit);}int GetNumber(){return edit->text().size();}bool Check() {return edit->text().size() > 0;}
private:QLineEdit* edit;
};class Third: public Step
{
public:Third(QWidget *parent = 0):Step(parent){SetText("把顶上3张插到中间任意位置");radio = new QRadioButton("第一张后面",this);radio1 = new QRadioButton("第二张后面",this);radio2 = new QRadioButton("第三张后面",this);radio3 = new QRadioButton("第四张后面",this);GetChooseLayout()->addWidget(radio);GetChooseLayout()->addWidget(radio1);GetChooseLayout()->addWidget(radio2);GetChooseLayout()->addWidget(radio3);radio->setChecked(true);}int GetChoose(){if(radio->isChecked())return 1;if(radio1->isChecked())return 2;if(radio2->isChecked())return 3;if(radio3->isChecked())return 4;return 1;}
private:QRadioButton* radio;QRadioButton* radio1;QRadioButton* radio2;QRadioButton* radio3;
};class Four: public Step
{
public:Four(QWidget *parent = 0):Step(parent){SetText("拿掉顶上的牌放到一边");}
};class Five: public Step
{
public:Five(QWidget *parent = 0):Step(parent){SetText("南方人/北方人/不确定,分别拿顶上的1/2/3张牌插到中间");QVBoxLayout* vbox = new QVBoxLayout;QHBoxLayout* hbox = new QHBoxLayout;QHBoxLayout* hbox1 = new QHBoxLayout;QButtonGroup* group = new QButtonGroup(this);QButtonGroup* group1 = new QButtonGroup(this);radio = new QRadioButton("南方人",this);radio1 = new QRadioButton("北方人",this);radio2 = new QRadioButton("不确定",this);radio3 = new QRadioButton("第一张后面",this);radio4 = new QRadioButton("第二张后面",this);radio5 = new QRadioButton("第三张后面",this);hbox->addWidget(radio);hbox->addWidget(radio1);hbox->addWidget(radio2);hbox1->addWidget(radio3);hbox1->addWidget(radio4);hbox1->addWidget(radio5);group->addButton(radio);group->addButton(radio1);group->addButton(radio2);group1->addButton(radio3);group1->addButton(radio4);group1->addButton(radio5);vbox->addLayout(hbox);vbox->addLayout(hbox1);GetChooseLayout()->addLayout(vbox);radio2->setChecked(true);radio3->setChecked(true);}int GetChoose(){if(radio->isChecked())return 1;else if(radio1->isChecked())return 2;else if(radio2->isChecked())return 3;return 1;}int GetChoose1(){if(radio3->isChecked())return 1;else if(radio4->isChecked())return 2;else if(radio5->isChecked())return 3;return 1;}
private:QRadioButton* radio;QRadioButton* radio1;QRadioButton* radio2;QRadioButton* radio3;QRadioButton* radio4;QRadioButton* radio5;
};class Six: public Step
{
public:Six(QWidget *parent = 0):Step(parent){SetText("男生拿掉1张,女生拿掉2张");radio = new QRadioButton("男生",this);radio1 = new QRadioButton("女生",this);GetChooseLayout()->addWidget(radio);GetChooseLayout()->addWidget(radio1);radio->setChecked(true);}int GetChoose(){if(radio->isChecked())return 1;if(radio1->isChecked())return 2;return 1;}
private:QRadioButton* radio;QRadioButton* radio1;
};class Seven: public Step
{
public:Seven(QWidget *parent = 0):Step(parent){SetText("把最顶上的放到最底下,循环7次");}
};class Last: public Step
{
public:Last(QWidget *parent = 0):Step(parent){SetText("好运留下来");flag = 1;}void Init(){SetText("好运留下来");flag = 1;}void ChangeText(){switch(flag){case 0:flag = 1;SetText("好运留下来");break;case 1:flag = 0;SetText("烦恼都丢掉");break;default:break;}}int GetFlag(){return flag;}private:int flag;
};class Widget : public QSplitter
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();
private:void StartGetData();void FirstStep();void SecondStep();void ThridStep();void FourStep();void FiveStep();void SixStep();void SevenStep();void LastStep();void UpdateData();
protected slots:void OnClicked(bool);
private:std::vector<Brand*> m_vecBrand;QString m_firstCard;QLabel* label;QPushButton* btn;QStackedWidget* m_stackedWidget;bool bOver;
};#endif // WIDGET_H
.cpp
#pragma execution_character_set("utf-8")
#include "widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QSplitter(parent)
{setOrientation(Qt::Vertical);label = new QLabel("qweqwe",this);QWidget* widget = new QWidget(this);m_stackedWidget = new QStackedWidget(this);addWidget(label);addWidget(widget);setStretchFactor(1,2);m_stackedWidget->addWidget(new Start);m_stackedWidget->addWidget(new First);m_stackedWidget->addWidget(new Second);m_stackedWidget->addWidget(new Third);m_stackedWidget->addWidget(new Four);m_stackedWidget->addWidget(new Five);m_stackedWidget->addWidget(new Six);m_stackedWidget->addWidget(new Seven);m_stackedWidget->addWidget(new Last);QHBoxLayout* hbox = new QHBoxLayout;QVBoxLayout* vbox = new QVBoxLayout;btn = new QPushButton("下一步",this);hbox->addStretch();hbox->addWidget(btn);vbox->addWidget(m_stackedWidget);vbox->addLayout(hbox);widget->setLayout(vbox);connect(btn, SIGNAL(clicked(bool)), this, SLOT(OnClicked(bool)));bOver = false;
}Widget::~Widget()
{}void Widget::StartGetData()
{Start* start = (Start*)m_stackedWidget->widget(0);QString str = start->GetStr();for(int i=0; i<str.length(); i++){Brand* brand = new Brand(QString(str[i]));m_vecBrand.push_back(brand);}
}void Widget::FirstStep()
{Start* start = (Start*)m_stackedWidget->widget(0);QString str = start->GetStr();for(int i=0; i<str.length(); i++){Brand* brand = new Brand(QString(str[i]));m_vecBrand.push_back(brand);}
}void Widget::SecondStep()
{Second* second = (Second*)m_stackedWidget->widget(2);int number = second->GetNumber();for(int i=0; i<number; i++){Brand* brand = m_vecBrand[0];m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.push_back(brand);}
}void Widget::ThridStep()
{Third* third = (Third*)m_stackedWidget->widget(3);int number = third->GetChoose();Brand* brand = m_vecBrand[0];Brand* brand1 = m_vecBrand[1];Brand* brand2 = m_vecBrand[2];m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.erase(m_vecBrand.begin());std::vector<Brand*> vecBrand;for(int i=0; i<m_vecBrand.size(); i++){vecBrand.push_back(m_vecBrand[i]);if(number == i + 1){vecBrand.push_back(brand);vecBrand.push_back(brand1);vecBrand.push_back(brand2);}}m_vecBrand = vecBrand;
}void Widget::FourStep()
{m_firstCard = m_vecBrand[0]->GetStr();setWindowTitle("当前选择牌为:"+ m_firstCard);m_vecBrand.erase(m_vecBrand.begin());
}void Widget::FiveStep()
{Five* five = (Five*)m_stackedWidget->widget(5);int number = five->GetChoose();int number1 = five->GetChoose1();std::vector<Brand*> vecBrand;switch (number) {case 1:vecBrand.push_back(m_vecBrand[0]);m_vecBrand.erase(m_vecBrand.begin());break;case 2:vecBrand.push_back(m_vecBrand[0]);vecBrand.push_back(m_vecBrand[1]);m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.erase(m_vecBrand.begin());break;case 3:vecBrand.push_back(m_vecBrand[0]);vecBrand.push_back(m_vecBrand[1]);vecBrand.push_back(m_vecBrand[2]);m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.erase(m_vecBrand.begin());break;default:break;}std::vector<Brand*> vecBrand1;for(int i=0; i<m_vecBrand.size(); i++){vecBrand1.push_back(m_vecBrand[i]);if(number1 == i + 1){vecBrand1.insert(vecBrand1.end(), vecBrand.begin(), vecBrand.end());}}m_vecBrand = vecBrand1;
}void Widget::SixStep()
{Six* six = (Six*)m_stackedWidget->widget(5);int number = six->GetChoose();switch (number) {case 1:m_vecBrand.erase(m_vecBrand.begin());break;case 2:m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.erase(m_vecBrand.begin());break;default:break;}
}void Widget::SevenStep()
{for(int i=0; i<7; i++){Brand* brand = m_vecBrand[0];m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.push_back(brand);}
}void Widget::LastStep()
{Last* last = (Last*)m_stackedWidget->widget(8);int flag = last->GetFlag();switch (flag) {case 0:m_vecBrand.erase(m_vecBrand.begin());break;case 1:Brand* brand = m_vecBrand[0];m_vecBrand.erase(m_vecBrand.begin());m_vecBrand.push_back(brand);break;}last->ChangeText();
}void Widget::UpdateData()
{QString str;for(int i=0; i<m_vecBrand.size(); i++){str+= m_vecBrand[i]->GetStr();}label->setText(str);
}void Widget::OnClicked(bool)
{if(bOver){setWindowTitle("magic");Last* last = (Last*)m_stackedWidget->widget(8);last->Init();bOver = false;btn->setText("下一步");m_stackedWidget->setCurrentIndex(0);return;}Step* step = (Step*)m_stackedWidget->currentWidget();if(!step->Check())return;if(m_vecBrand.size() == 1){m_vecBrand.clear();Last* last = (Last*)m_stackedWidget->widget(8);last->SetText("之前的牌为:"+ m_firstCard+ " 对上否?");bOver = true;btn->setText("重新开始");return;}switch (m_stackedWidget->currentIndex()) {case 0://4张牌StartGetData();break;case 1://对折撕开FirstStep();break;case 2://根据名字字数,把顶上的牌放到下面SecondStep();break;case 3://把顶上3张插到中间任意位置ThridStep();break;case 4://拿掉顶上的牌放到一边FourStep();break;case 5://南方人/北方人/不确定,分别拿顶上的1/2/3张牌插到中间FiveStep();break;case 6://男生拿掉1张,女生拿掉2张SixStep();break;case 7://把最顶上的放到最底下,循环7次SevenStep();break;case 8://好运留下来 烦恼都丢掉LastStep();break;default:break;}UpdateData();if(m_stackedWidget->currentIndex() + 1 < m_stackedWidget->count())m_stackedWidget->setCurrentIndex(m_stackedWidget->currentIndex() + 1);
}相关文章:
Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序
什么是约瑟夫环问题? 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N6,M5,被杀掉的顺序是:5ÿ…...
Typora+PicGO+腾讯云COS做图床
文章目录 Typora+PicGO+腾讯云COS做图床一、为什么使用图床二、Typora、PicGO和腾讯云COS介绍三、下载Typora和PicGOTyporaPicGO 四、配置Typora、PicGO和腾讯云COS腾讯云COS配置PicGO配置Typora配置 Typora+PicGO+腾讯云COS做图床…...
WebStorm | 如何修改webstorm中新建html文件默认生成模板中title的初始值
在近期的JS的学习中,使用webstorm,总是要先新建一个html文件,然后再到里面书写<script>标签,真是麻烦,而且标题也是默认的title,想改成文件名还总是需要手动去改 经过小小的研究,找到了修…...
大厂的数据质量中心系统设计
日常工作中,数据开发上线完一个任务后并不是就可以高枕无忧,时常因上游链路数据异常或者自身处理逻辑的 BUG 导致产出的数据结果不可信。而问题发现可经历较长周期(尤其离线场景),往往是业务方通过上层数据报表发现数据…...
docker (一)-简介
1.什么是docker Docker 是一个开源的应用容器引擎,由于docker影响巨大,今天也用"Docker" 指代容器化技术。 2.docker的优势 一键部署,开箱即用 容器使用基于image镜像的部署模式,image中包含了运行应用程序所需的一…...
全国乙卷高考理科数学近年真题的选择题练一练和解析
虽然很多中小学才陆陆续续开学,但是高三的学子们一定是过年的时候也在抓紧备考,毕竟,距离2024年高考只剩下不到四个月了。 如何在最后四个月的时间提高成绩?以高考真题为抓手是一个不错的方法,因为真题都是严格遵循考试…...
uniapp运动课程健身打卡系统微信小程序
考虑到实际生活中在我来运动管理方面的需要以及对该系统认真的分析,将系统分为小程序端模块和后台管理员模块,权限按管理员和用户这两类涉及用户划分。 (a) 管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、课程类别管理…...
IP详细地理位置查询:技术原理与应用实践
IP地址是互联网上设备的唯一标识,在网络安全、个性化服务等领域具有重要意义。通过IP详细地理位置查询,可以获取到IP地址所在地的具体信息,为网络管理、定位服务等提供支持。IP数据云将深入探讨IP详细地理位置查询的技术原理、应用实践以及相…...
SpringBoot2整合支付宝进行沙箱支付
目录 1. 进入支付宝的开放平台 2. 导入Maven依赖 3. 配置application.yml文件 NATAPP.cn(内网穿透工具) 注册登录 下载 4. 后端配置 5. 测试 1. 进入支付宝的开放平台 开发平台: 支付宝开放平台 登录后,点击控制台 点击最下面的沙箱 2. 导入Maven依赖 <dependency…...
世界顶级名校计算机专业,都在用哪些书当教材?
清华、北大、MIT、CMU、斯坦福的学霸们在新学期里要学什么?今天我们来盘点一下那些世界名校计算机专业采用的教材。 欢迎来到英杰社区: https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区: https://bbs.csdn.net/topics/617897397 &…...
Linux内核解读
来自鹅厂架构师 作者:aurelianliu 工作过程中遇到的调度、内存、文件、网络等可以参考。 1.os运行态 X86架构,用户态运行在ring3,内核态运行在ring0,两个特权等级。 (1)内核、一些特权指令,例…...
在VS里使用C#制作窗口应用
新建项目 创建项目的时候搜索net,选择这个。 打开应该是这样 第一个控件 选择公共控件 - PictureBox - 拖入Form 在Image处选择上传本地资源,建议上传一个小一点的图片。 修改一下尺寸。 ctrls 保存 从“属性”切换到“事件” 双击Click事件…...
Nginx的流式响应配置
Nginx的流式响应配置 使用ChatGPT的能力在聊天时来实现打字机效果,因此需要服务端接口进行流式响应,碰到了几个问题: 1、服务端明明配置了响应头的Content-Type为:text/event-stream,但前端仍然不是流式接收内容。 2、…...
Excel练习:双层图表
Excel练习:双层图表 学习视频Excel制作双层图表,很多人都不会,其实只需1步操作就够了!_哔哩哔哩_bilibili 通过调整两个图形的显示范围实现 增加折现图的负数显示范围,使折现图仅出现在整体图形的上方增加柱形…...
2024展望龙年,索蝶音乐成立
近日,北京索蝶文化传媒有限公司在北京成立,引起了业内众多公司的关注。作为翰扬影视的兄弟公司,索蝶音乐致力于音乐、练习生两大市场的深耕及探索,立志三年内成为国内市场的主流厂牌。 公司负责人刘孝林先生表示,索蝶音乐以艺人经纪、艺人包装、音乐制作与发行、练习生选拔与培…...
什么是 Wake-on-LAN?如何使用 Splashtop 远程喊醒电脑
在当今数字互联的世界里,远程访问电脑已不仅仅是一种便利,而是许多人的需要。无论是远程工作、IT 支持,还是管理整个网络中的计算机群,我们都必须掌握正确的工具和技术。 其中一项在远程访问中发挥关键作用的技术是 Wake-on-LAN …...
正则表达式的一些高级用法
不允许出现某个单词,使用?! (?!Pattern).\.matches 表示.matches之前的不能是Pattern非贪婪匹配,在匹配项后加? matches\((.*?)\) 这里在.*后加问号,表示尽可能少的匹配。\w表示字母、数字和下划线防范redos攻击,可使用Cyber-…...
第3.1章:StarRocks数据导入——Insert into 同步模式
一、概述 在StarRocks中,insert的语法和mysql等数据库的语法类似,并且每次insert into操作都是一次完整的导入事务。 主要的 insertInto 命令包含以下两种: insert into tbl select ...insert into tbl (col1, col2, ...) values (1, 2, ...…...
Docker基本使用【数据卷的挂载及常用命令】
镜像和容器:当我们利用docker安装应用时,Docker会自动搜索并下载应用的镜像(image),镜像不仅包含应用本身还包含应用所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离的环境,称为容器&am…...
5G DTU实现燃气管道数据采集远程管理
随着物联网技术与智慧城市的不断发展,燃气管道户外组网的需求逐渐浮现。在户外组网应用中5G DTU(Data Terminal Unit)发挥着至关重要的作用。5G DTU可用于数据采集、传输与远程管理,能够实现燃气数据的单点或多点采集和传输&#…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
