- 靡不有初,鲜克有终。
- Everything has a beginning, but not everything has an end.
简易PID算法的快速扫盲
简易PID算法的快速扫盲(超详细+过程推导+C语言程序) 转载于 简易PID算法的快速扫盲(超详细+过程推导+C语言程序) - 知乎 (zhihu.com) 网上关于PID算法的文章很多,但是感觉有必要自己再进行一次总结,抽丝剥茧地重新认识了一下PID; 1 前言 控制系统通常根据有没有反馈会分为开环系统和闭环系统,在闭环系统的控制中,PID算法非常强大,其三个部分分别为; P:比例环节; I:积分环节; D:微分环节; PID算法可以自动对控制系统进行准确且迅速的校正,因此被广泛地应用于工业控制系统。 2 开环控制 首先来看开环控制系统,如下图所示,隆哥蒙着眼,需要走到虚线旗帜所表示的目标位置,由于缺少反馈(眼睛可以感知当前距离和位置,由于眼睛被蒙上没有反馈,所以这也是一个开环系统),最终隆哥会较大概率偏离预期的目标,可能会运行到途中实线旗帜所表示的位置。 开环系统的整体结构如下所示; 这里做一个不是很恰当的比喻; Input:告诉隆哥目标距离的直线位置(10米); Controller:隆哥大脑中计算出到达目标所需要走多少步; Process:双腿作为执行机构,输出了相应的步数,但是最终仍然偏离了目标; 看来没有反馈的存在,很难准确到达目标位置。 3 闭环控制 所以为了准确到达目标位置,这里就需要引入反馈,具体如下图所示; 在这里继续举个不怎么恰当的比喻;隆哥重获光明之后,基本可以看到目标位置了; 第一步Input:告诉隆哥目标距离的直线位置(10米); 第二步Controller:隆哥大脑中计算出到达目标所需要走多少步; 第三步Process:双腿作为执行机构,输出了相应的步数,但是最终仍然偏离了目标; 第四步Feedback:通过视觉获取到目前已经前进的距离,(比如前进了2米,那么还有8米的偏差); 第五步err:根据偏差重新计算所需要的步数,然后重复上述四个步骤,最终隆哥达到最终的目标位置。 在这里继续举个不怎么恰当的比喻;隆哥重获光明之后,基本可以看到目标位置了; 第一步Input:告诉隆哥目标距离的直线位置(10米); 第二步Controller:隆哥大脑中计算出到达目标所需要走多少步; 第三步Process:双腿作为执行机构,输出了相应的步数,但是最终仍然偏离了目标; 第四步Feedback:通过视觉获取到目前已经前进的距离,(比如前进了2米,那么还有8米的偏差); 第五步err:根据偏差重新计算所需要的步数,然后重复上述四个步骤,最终隆哥达到最终的目标位置。 隆哥为了最短时间内到达目标位置,进行了不断的尝试,分别出现了以下几种情况; 跑得太快,最终导致冲过了目标位置还得往回跑; 跑得太慢,最终导致到达目标位置所用时间太长; 经过不断的尝试,终于找到了最佳的方式,其过程大概如下图所示; 这里依然举一个不是很恰当的比喻; 第一步:得到与目标位置的距离偏差(比如最开始是10米,后面会逐渐变小); 第二步:根据误差,预估需要多少速度,如何估算呢,看下面几步; P比例则是给定一个速度的大致范围,满足下面这个公式; 因此比例作用相当于某一时刻的偏差(err)与比例系数Kp的乘积,具体如下所示; 绿色线为上述例子中从初始位置到目标位置的距离变化; 红色线为上述例子中从初始位置到目标位置的偏差变化,两者为互补的关系; I积分则是误差在一定时间内的和,满 以下公式; 如下图所示; 红色曲线阴影部分面积即为积分作用的结果,其不断累积的误差,最终乘以积分系数Ki就得到了积分部分的输出; D微分则是误差变化曲线某处的导数,或者说是某一点的斜率,因此这里需要引入微分; 从图中可知,当偏差变化过快,微分环节会输出较大的负数,作为抑制输出继续上升,从而抑制过冲。 综上,Kp,Ki,Kd,分别增加其中一项参数会对系统造成的影响总结如下表所示; 4.2 理论基础 上面扯了这么多,无非是为了初步理解PID在负反馈系统中的调节作用,下面开始推导一下算法实现的具体过程;PID控制器的系统框图如下所示; ...
好久不见
有一段时间没有好好的写博客了。。。 昨晚突然心血来潮,打开hexo准备开写,谁知到hexo部署时一直报错,于是乎和hexo 斗智斗勇了半天,结果以我的失败而告终,突然觉的自己的blog页面太华而不实,心想着换一个主题,接着就吧主题和博客生成系统都换了,hugo的页面渲染速度确实快,而且下载也快,终于摆脱了蛋疼的npm,一个二进制完成迅速完成hugo的安装。 从Hexo 迁移文章到 Hugo 一篇一篇复制是不可能的,虽然这么些年也没有写多少内容,但是我懒得一篇篇的复制,看了看两者文章的md格式,用python写一个格式转换应该是可行,于是我立刻打开了CHATGPT,命令它帮我写一个,经过我2个多小时的调教,还是没有给我写好。。后来在github上找到了一个python小工具,最终完成了文章的迁移,接着是文档的永久链接设置,比较小站还是可以在百度搜索到的,链接一直换可不好。 部署完成 完成这些内容,已经是今天的下午了,一会3点还要去进行实习报告。。。。 接下来的工作 目前对markdown非常的感兴趣,接下来准备好好适应适应,另外再把自己考研复习知识点总结归纳到小站。 这个主题要是配上高级的公式,页面就显得及其高级了。 eg: $$ \int_{-1}^{2}f(x)dx $$
考研英语语法基础
十大词性 noun名词:n. pronoun 代词: pron. 用于代替名词(we、that、all、witch) numeral 数词: num. article 冠词: art.,加在名词或名词之前的 a、an、the verb 动词:v. advert 副词:adv. 修饰动作的词 (next、much、)增加程度等 + ly adjective 形容词:adj. preposition 介词:prep. (at in on) conjunction 连词:conj. (and、also、but) Interjection 感叹词 (无语法内容):int 九种成分 实意动词: *有实际含义:吃喝玩乐 *单独做谓语:不及物动词vi. 及物动词vt. 系动词 be动词:am/is/are get/become/turn/go/grow:变得XX look/sound/semll/taste/feel:XX起来 keep/remain/stay/seem/appear/prove/turn out:保留保持、似乎、结果是 宾语: 承受动作的词 定语: 定语是用来修饰、限定、说明名词或代词的品质与特征的。一般译为XX的。 状语: 从情况、时间、处所、方式、条件、对象、肯定、否定、范围和程度等方面对谓语中心词进行修饰、限制。 表语: 表语是紧跟系动词之后的。 补语: 补语是对宾语的补充说明。 双宾语: 双宾语就是直接宾语+间接宾语。其中直接宾语承受谓语动词的动作,间接宾语表示这个动作的方向或者目标。比如:I bought my mother a TV. 同位语: 两个东西有同样的地位。 谓语的三态 谓语动词的时态 谓语动词的情态 can (could), may (might), must, need, ought to, dare (dared), shall(should), will (would) ...
大数据与智能决策知识点
大数据采集工具 Chukwa Flume Scrible Kafka Kafka介绍 Apache Kafka被设计成能够高效地处理大量实时数据,其特点是快速的、可扩展的、分布式的,分区的和可复制的。Kafka是用Scala语言编写的,虽然置身于Java阵营,但其并不遵循JMS规范。 话题 生产者 消费者 代理 噪声 噪声处理 分箱 回归 聚类 数据挖掘常用算法 广义角度 分类 聚类 估值 预测 机器学习 : 决策树 聚类算法 基于密度的聚类算法 基于密度聚类的经典算法DBSCAN(Density-Based Spatial Clustering of Application with Noise,具有噪声的基于密度的空间聚类应用)是一种基于高密度连接区域的密度聚类算法。 DBSCAN的基本算法流程如下:从任意对象P 开始根据阈值和参数通过广度优先搜索提取从P 密度可达的所有对象,得到一个聚类。若P 是核心对象,则可以一次标记相应对象为当前类并以此为基础进行扩展。得到一个完整的聚类后,再选择一个新的对象重复上述过程。若P 是边界对象,则将其标记为噪声并舍弃 预测模型 预测分析是一种统计或数据挖掘解决方案,包含可在结构化与非结构化数据中使用以确定未来结果的算法和技术,可为预测、优化、预报和模拟等许多其他相关用途而使用。 时间序列预测是一种历史资料延伸预测,以时间序列所能反映的社会经济现象的发展过程和规律性,进行引申外推预测发展趋势的方法。 时间序列预测及数据挖掘分类 柱状图作用 传统柱状图一般用于表示客观事物的绝对数量的比较或者变化规律,用于显示一段时间内数据的变化,或者显示不同项目之间的对比,分为:二维簇状柱形图、二维堆积柱形图、二维百分比堆积柱形图。 三维柱状图的可视化效果更佳直观,而且能够在第三个坐标轴显示三维数据。三维柱状图采用柱体来量化数据,同时对柱体可以采用不用的颜色编码,来表述不同的变量 可视化 沙盒分析法 认知作业法 顺序模式法 协同多视图法 云渲染 云渲染(Rendering Cloud)的概念源自于云计算,是云计算在渲染领域的应用。云渲染是指将由客户端处理的图形渲染转移至服务器端(云端)的技术;云渲染技术的应用,可以使客户端简化,只需要具备显示能力以及网络接入能力,就可以享有顶级的图形处理能力,使同一图形可以呈现在众多终端设备上。 云渲染系统的组成包括以下 图形资源工具: 按指定格式输出可视化图形资源的工具,用户可以通过该工具生成可视化图形并提交至渲染云; 渲染云: 由存储服务器、渲染脚本解析服务器、渲染服务器、图形压缩服务器共同组成 终端: 终端为渲染请求的提交者和渲染结果的接收者,在需要渲染服务时,终端将向渲染云提交请求,收到可视化渲染结果后,终端将负责最终显示给用户。 可视化交互方法五大技术 平移 缩放 概览 细节 动态过滤 焦点 上下文 多视图关联协调 深度学习 CNTK MXnet THeano Torch Deeplearning4j CNTK 的特点 训练和测试多种神经网络的通用解决方案。 用户使用一个简单的文本配置文件指定一个网络。 尽可能无缝地把很多计算在一个GPU上进行。 自动计算所需要的导数,网络是由许多简单的元素组成。 通过添加少量的C ++代码来实现必需块的扩展。 MXnet 的特点 (1)其设计说明可以被重新应用到其他深度学习项目中。 (2)任意计算图的灵活配置。 (3)整合了各种编程方法的优势,最大限度地提高灵活性和效率。 (4)轻量、高效的内存,以及支持便携式的智能设备,如手机等。 (5)多GPU扩展和分布式的自动并行化设置。 (6)支持Python、R、C++和Julia。 (7)对云计算友好,直接兼容S3、HDFS和Azure。 Torch 的特点 很多实现索引、切片、移调的程序。 通过LuaJIT的C接口。 快速、高效的GPU支持。 可嵌入、移植到iOS、Android和FPGA的后台。 网页排序四种算法 访问量 词频统计词语位置加权 基于链接分析 基于智能化的排序算法 推荐系统:大题 p19 ...
安卓大作业——飞鸽传书(高仿微信)
产品介绍 项目背景 随着网络的出现,即时通讯软件便出现在了人们的生活中,即时通讯app可以帮助人们实现快速沟通,节省时间,提高效率。例如,团队成员可以在办公室或出差途中随时通过即时通讯app进行实时讨论和共享资源,避免沟通障碍,增进沟通的质量和效果。 技术框架 本次的软件开发主要以Java编程环境为主,在手机端编写安卓原生APP,在服务器后端使用SpringBoot框架为主,实现用户消息的转发和暂存,用户头像的上传与保存。 在软件的后端实现上,我使用SpringBoot框架,目的是使得产品的后期功能开发更加轻松,同时使用SpringBoot可以将服务端一键打包成jar包,简化服务器部署的复杂度。用户的头像使用腾讯云的对象存储保存,免去了调试与实际运行时头像存储位置不一致的问题,同时文件保存的可靠性和安全性也得到加强。 功能介绍 登录功能介绍 本次开发的APP与大部分软件不同,为保证软件的私密性,我们采用最小云端保存的方案,即将用户的数据尽量的放在本地,仅仅上传必须的内容。 用户初次使用本软件,软件会引导用户完成昵称和个性签名的配置,配置完成之后,系统会通过使用安卓的API生成一个几乎唯一的AndroidID作为用户的唯一ID。至此用户的ID基本信息就设置完成了。 头像上传 为保证更好的美观以及用户的体验,我们的软件可以自定义头像,用户可以从自己相册或者文件中选择一个自己喜欢的照片作为自己的头像。选择完成之后,软件便会上传头像,进入到欢迎界面。 扫一扫添加好友 使用扫一扫添加好友,在另一部手机的我的界面点击二维码的小图标,进入名片界面,使用另一部手机APP中的扫一扫功能扫描名片上的二维码,即可添加对方为好友。 好友聊天 选择一个好友,点击该好有,选择发消息,进入到聊天界面,在聊天框输入消息,点击发送,好友便会收到消息,并收到通知(需要打开通知权限)。 更换聊天背景 进入我的界面,点击关于,在关于界面中点击摇一摇更换头像开关,返回到聊天界面,摇一摇手机即可切换软件内部自带的聊天背景,此时去关于界面关闭摇一摇切换聊天背景,即可固定当前的聊天背景。 清空聊天记录 在消息界面,长按消息,软件会弹出一个界面您可以选择不显示该聊天,或者删除该聊天。 删除好友 在好友界面,点击任意好友,选择删除好友,再次确认,即可删除该好友,好友删除后,对方的好友列表中自己并不会消失,对方给自己发送的消息自己将无法收到。 技术实现 本次软件的核心功能便是用户消息的转发与暂存,网络的状况千变万化,如何保证消息能够被正确的接收和发送,避免消息被漏掉以及消息的实时性都是我们要关注的重点。 消息的封装 为保证消息的完整性和后期修改的灵活行,我们将消息封装在一个实体类中,并将该类序列化以便在Socket上传输。 package cn.shilight.myapplication.message; import java.io.Serializable; public class MessagObtian implements Serializable { private static final long serialVersionUID = 7471391170055841173L; public String getForUid() { return forUid; } public void setForUid(String forUid) { this.forUid = forUid; } public String getFromUid() { return fromUid; } public void setFromUid(String fromUid) { this.fromUid = fromUid; } private String forUid; private String fromUid; private int messageType; public int getMessageType() { return messageType; } public void setMessageType(int messageType) { this.messageType = messageType; } private String content ; final static int Tap = 0; final static int Text = 1; public MessagObtian(String forUid, String fromUid, int messageType) { // TODO Auto-generated method stub this.forUid = forUid; this.fromUid = fromUid; this.messageType = messageType; } public String getContent() { return content; } public MessagObtian setContent(String content) { this.content = content; return this; } } 图表 2消息类 ...
数据结构B树和B+树
众所周知数据结构是计算机程序设计不可缺少的一部B树和B+树在查找算法中占着很重要的地位。 B树 B树的性质 B树的阶 在B树中,如果单个节点最多有m个子树,那么我们就说这颗B树的阶是m; B树的阶决定了单个节点所能包含的关键字个数,一个树的阶如果是3,那个这个B树单个节点的最大的关键字数量就是2(m-1); 若该节点不是叶节点,则至少有两颗子树; 除了根节点以外所有的非叶子节点至少有⌈m/2⌉(向上取整)颗子树,即最少含有⌈m/2⌉-1个关键字;
一览众山小
常闻古人;一览众山小 上个周末,和室友们,一起踏上了泰安的旅程。感触颇多。 出发时意气风发的我们高估了自己的精神状况,也为了节省开支,把钱用在刀刃(吃)上,买了一张10个小时之久的硬座,本想着,大家可以在车上舒舒服服的到达济南,结果走了不到一半的距离时,我们就开始难受了,各种不舒服,大家时不时的换一下坐姿,一寻找最舒服的姿势,可想而知,始终找不到合适的姿势,最后我们总结出一个结论,绿皮火车的硬座,做的时间长了会很难受。 当然,你所买的每一张票,做的每一个决定,都会决定你在旅途中所遇到的每个人。。 令我触动很深的是一位大爷,上车,找坐位后,对面坐着一位大爷,大爷约莫有60多岁,脸上布满着岁月的痕迹,大爷的穿着很干净,用着一部老年机,每到整点,都会报时,为什么印象如此深刻呢,当老爷爷伸右出胳膊时,我们并没有看到大爷的手,他是一名残疾人。 路途遥远而漫长…看着窗外飞速闪过的树木,天也渐渐的变暗,夜幕降临,我们同行6人也开始准备晚餐了,人们常说,火车站和网吧的桶面是最香的,活了二十几载,还没有在火车上吃过桶面,我们都想试试。这位大爷也带来方便面,他的手不方便,我们帮他把他把面泡好,大爷很感激,在经过简单的聊天后,我们了解到,大爷的目的地和我们一样都是济南,他是回家,他的家乡在山东临沂,这次是一个人去黑龙江佳木斯看女儿,一个坐大约30个小时的绿皮火车。大爷说,他的女儿是不叫他一个来的,怕他在路上不方便。欸,可怜天下父母心,有哪个父亲不想看看自己的女儿呀,哪怕千里之外。 随着夜色的笼罩,我们困意来袭,火车一路摇摆,我们很难睡着,几乎未眠。。 次日凌晨2点,我们到了济南,内心的激动让我们一行人再次活跃起来,济南火车站透露着年代的气息,周围公路两旁的树木高大葱郁,处处透露着一种年代感。我们找了个网吧,想着在里面好好休息一下,网吧的座椅不错,本想着在包间好好休息一下,结果舍友网瘾来犯,一晚上叽叽喳喳,我们几乎未免。。。 清晨,我们满脸睡意的从网吧走了出来,在济南火车站吃了点早点,10元人民币的乞丐版煎饼+2元寡然无味的豆浆,我们一脸无语,老板娘满脸得意的笑容。。 济南到泰安,高铁只需要二十几分钟,到了泰安,找个共享电动车,直蹦酒店,休息,直到下午。 爬泰山的过程应该是最难忘的了,我们6人小组,手拿低音炮,打着 “小野人”牌子的强光手电,一路奔向最高峰,杰哥体力最差,我们在路上得照顾他,让他在我们中间走,怕他掉队。。。 其实,写着写着就不想往下写了,为避免流水账,就这样吧。
安卓之Service简单实现
Service 简介 Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。 生命周期 在安卓的Service 中,有两种类型的srevice 一种是直接通过 startService 启动的servic 其生命周期不受 Activity 的限制,另一种Service 是和Activity 绑定的服务,其生命周期收到与之绑定的 使用服务实现简单音乐播放器 权限声明 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许写手机存储(必须) --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> 界面代码 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/paly" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="92dp" android:layout_marginTop="192dp" android:text="播放" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="192dp" android:layout_marginEnd="104dp" android:text="暂停" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/address" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="92dp" android:ems="10" android:inputType="text" android:text="音乐地址" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.457" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> MainActivity.java ...
数据结构-顺序表的简单实现
代码实现 #include <stdio.h> #include <malloc.h> #define InitSize 10 typedef struct{ int *data; int MaxSize; int length; // 当前长度 }SqList; // 初始化 void InitList(SqList* L){ L->data=(int *)malloc(InitSize*sizeof(int)); L->length=0; L->MaxSize=InitSize; } // 动态增加 void IncreaseSize(SqList * L,int len) { int *p = L->data; L->data = (int *) malloc((L->MaxSize + len) * sizeof(int)); for (int i = 0; i < L->length; i++) { L->data[i] = p[i]; } L->MaxSize = L->MaxSize + len; free(p); } /// 插入一条数据 int insert(SqList* L ,int data){ // 有空间的话 if(L->length<L->MaxSize){ L->data[L->length++] = data; return 0; } return -1; } int main(){ SqList L; InitList(&L); printf("Max len= %d",L.MaxSize); printf("\n"); printf("length = %d",L.length); for (int i = 0; i < 5; ++i) { insert(&L,i); } printf("\n"); printf("Inserted Date is : \n"); for (int i = 0; i < L.length; ++i) { printf("%d ",L.data[i]); } printf("\n"); printf("Max len= %d",L.MaxSize); printf("\n"); printf("length = %d",L.length); IncreaseSize(&L,5); printf("\n After Increase the Sql Size \n"); printf("Max len= %d",L.MaxSize); printf("\n"); printf("length = %d",L.length); printf("\n"); printf("Inserted Date is : \n"); for (int i = 0; i < L.length; ++i) { printf("%d ",L.data[i]); } return 0; }; 运行结果如下 Max len= 10 length = 0 Inserted Date is : 0 1 2 3 4 Max len= 10 length = 5 After Increase the Sql Size Max len= 15 length = 5 Inserted Date is : 0 1 2 3 4 ...
蓝桥杯-重复字符串
问题描述 如果一个字符串 S 恰好可以由某个字符串重复 K 次得到,我们就称 S 是K 次重复字符串。例如 “abcabcabc” 可以看作是 “abc” 重复 3 次得到,所以“abcabcabc” 是 3 次重复字符串。同理 “aaaaaa” 既是 2 次重复字符串、又是 3 次重复字符串和 6 次重复字符串。现在给定一个字符串 S ,请你计算最少要修改其中几个字符,可以使 S 变为一个 K 次字符串? 输入格式 输入第一行包含一个整数 K。 第二行包含一个只含小写字母的字符串 S 。 输出格式 输出一个整数代表答案。如果 S 无法修改成 K 次重复字符串,输出 − 1。 样例输入 2 aabbaa 样例输出 2 评测用例规模与约定 对于所有评测用例,1 ≤ K ≤ 100000, 1 ≤ | S | ≤ 100000。其中 | S | 表示 S 的长度。 import java.util.Scanner; public class Main { public static void main(String [] args) { // TODO Auto-generated method stub String ss ; int max_ch = 0; Scanner sc = new Scanner(System.in); char[] ch = new char[26]; int k = sc.nextInt(); ss = sc.next(); if(ss.length()%k!=0) { System.out.println(-1); return; } int ll = ss.length()/k; char [][] pa =new char[k][ll]; for (int i = 0; i < k ;i++) { for (int j = 0; j < ss.length()/k; j++) { pa[i][j] = ss.charAt(i*ll+j); } } for (int i = 0; i < ll; i++) { for (int j = 0; j < k; j++) { ch[pa[j][i]-'a'] ++; } int c = 0; for (int j = 0; j < 26; j++) { if(ch[j]!=0) { c ++; } } if(c==1) { for (int j = 0; j < 26; j++) { ch[j] = 0; } continue; } /// int max = 0; int max_pos= 0; int cha_num = 0; for (int j = 0; j < 26; j++) { if(max<ch[j]) { max = ch[j]; max_pos = j; } } // 找到最大的啦 for (int j = 0; j < 26; j++) { if(j!=max_pos) { cha_num += ch[j]; } } max_ch += cha_num; for (int j = 0; j < 26; j++) { ch[j] = 0; } } System.out.println(max_ch); } } 注 : 目前通过了百分之90,最后一个 好像控制台没有把字符串全部输入 ...