自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

繁华落尽梦一场

暮春者,春服既成,冠者五六人,童子六七人,浴乎沂,风乎舞雩,咏而归

  • 博客(67)
  • 资源 (12)
  • 收藏
  • 关注

原创 redis源码分析——6、跳表skiplist的实现

skiplist是很有用的一种数据结构,在面试中也常见,效率上基本和红黑树等价,而编码实现又比红黑树简单很多1. 怎么样自己实现一个dict​ 不像C++、java等高级语言内置了map,C语言并没有提供dict库,所以如果想使用dict就需要自己实现。那么实现一个dict有方法呢?数组法这也是最容易实现的一种方法,简单说就是开辟一个长度为N的大数组(通常N是一个质数),然后通过一个哈希函数计算key的哈希值d,然后用d%N得到key对于的数组下边。设想一下,如果数组开的足够大,而且哈希函数.

2021-10-28 00:06:16 226

原创 redis源码分析——5、dict实现

dics是一种常用的数据结构,而C语言没有提供内置类型,本文一起看看redis中dict的实现1. 怎么样自己实现一个dict​ 不像C++、java等高级语言内置了map,C语言并没有提供dict库,所以如果想使用dict就需要自己实现。那么实现一个dict有方法呢?数组法这也是最容易实现的一种方法,简单说就是开辟一个长度为N的大数组(通常N是一个质数),然后通过一个哈希函数计算key的哈希值d,然后用d%N得到key对于的数组下边。设想一下,如果数组开的足够大,而且哈希函数足够散列,我们.

2021-10-28 00:04:57 201

原创 redis源码分析——4、压缩列表ziplist实现

ziplist原理简单,但实现起来较麻烦,尤其是连锁更新的时候,本文一起看看ziplist的具体实现一、存储结构ziplist:内存布局​ 各字段含义zlbytes:压缩列表的字节长度,占4个字节,因此压缩列表最长(2^32)-1字节;zltail:压缩列表尾元素相对于压缩列表起始地址的偏移量,占4个字节;zllen:压缩列表的元素数目,占两个字节;那么当压缩列表的元素数目超过(2^16)-1怎么处理呢?此时通过zllen字段无法获得压缩列表的元素数目,必须遍历整个压缩列.

2021-10-28 00:03:40 234

原创 redis源码分析——3、简单动态字符串

redis对C语言的原生char*做了封装,关于string只讨论两个问题:1、redis支持的最长string是多少?2、string的扩容策略一、相关定义sds的定义typedef char *sds;sdshdr的定义/* Note: sdshdr5 is never used, we just access the flags byte directly. * However is here to document the layout of type 5 SDS stri.

2021-10-28 00:02:10 71

原创 redis源码分析——2、读写应答

了解了redis网络框架后,我们具体看看请求->回复的过程到底是怎么样的一、读回调客户端的消息处理循环有上一节可知,redis通过epoll来检测是否有客户端接入,一旦有请求,则会调用acceptTcpHandler,然后再调用createClient将fd和client对应起来,最后挂在到全局的server.clients链表上面。在createClient里面又调用了connSetReadHandler**(conn, readQueryFromClient)来将client加入到e.

2021-10-27 23:58:21 189

原创 redis源码分析——1、网络框架

一、 核心数据结构ConnectionType, ConnectionType定义了网络连接的接口,包含read、write等,具体定义如下。typedef struct ConnectionType { void (*ae_handler)(struct aeEventLoop *el, int fd, void *clientData, int mask); int (*connect)(struct connection *conn, const char *addr, int

2021-10-27 23:55:11 221

原创 数据库事务中MVCC的实现

原文链接 数据库事务中MVCC的实现MVCC(Multi-Version Concurrency Control),实现了读事务不加锁。MVCC对每行数据维护多个版本,无论事务执行时间有多长,MVCC总是能够提供与事务开始时刻一致的数据以InnoDB实现为例,InnoDB对每张表增加了两个隐藏列,其中一列存储行被修改的“时间”,另一列存储行被删除的“时间”。当然了,InnoDB存储的不是时间,而是与时间对应的数据库系统的版本号,当开启一个事务时,InnoDB都会给这个事务分配一个递增的版本号,这个版本号

2020-10-01 11:47:17 180

转载 redis源码之一步一步解析客户端连接请求

redis是一个性能很高的内存数据库,那么从我们使用客户端连接到执行一个命令,在redis中是如何执行的?接下来我们从源码角度调试查看内部流程。由于redis 6对网络IO使用了多线程,我们暂时先用redis 5来调试。服务启动redis作为后台服务,首先自己先要运行起来,然后等待客户端的连接。我们知道,redis网络模型是常见的Reactor模式,简单来说就是主函数复杂接收包,对于处理请求通过回调函数(CallBack)处理。通常情况下,我们会把回调函数放在单独我work线程里面。我们从main函

2020-10-01 11:45:05 537

原创 leetcode-212. Word Search II

/*Given a 2D board and a list of words from the dictionary, find all words in the board.Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those ho...

2020-01-16 23:30:00 151

原创 leetcode 二叉树先、中、后序遍历,非递归法

1. 先序遍历vector<int> preorderTraversal(TreeNode* root){ vector<int> result; stack<TreeNode *> st; TreeNode *p = root; while (!st.empty() || p != nullptr) { ...

2020-01-10 23:15:36 151

原创 Leetcode 100. Same Tree

Given two binary trees, write a function to check if they are the same or not.Two binary trees are considered the same if they are structurally identical and the nodes have the same value.Example ...

2019-08-25 16:22:32 128

原创 leetcode 46. Permutations

Given a collection ofdistinctintegers, return all possible permutations.Example:Input: [1,2,3]Output:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]用递归class Solution...

2019-08-25 00:20:51 88

原创 opencv基于Haar+Adaboost人脸识别

import cv2face_xml = cv2.CascadeClassifier(r'D:\CodeFile\opencv-3.4.2\data\haarcascades\haarcascade_frontalface_default.xml')eye_xml = cv2.CascadeClassifier(r'D:\CodeFile\opencv-3.4.2\data\haarcas...

2019-04-24 22:49:46 291

原创 C++11 右值引用与g++ fno-elide-constructors编译选项

右值和将亡值 C++11增加了一种新类型,称为右值引用(R-value-reference),标记为T &&。那么怎么区分左右值?左值指的是表达式结束后依然存在的持久对象,右值指的是表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。所有的具名变量或者对象都是左值,而右值不具名。 ...

2019-04-07 23:13:47 748 1

原创 64位murmurhash 源码

提供了x86和新x64两个平台上生成64位MurmurHash的算法#ifndef MURMURHASH_H_INCLUDED#define MURMURHASH_H_INCLUDED// 64-bit hash for 64-bit platformsuint64_t MurmurHash64A (const void * key, int len, unsigned int se...

2019-03-24 00:59:05 1897

原创 Python 调用jieba进行分词

1. 首先安装jieba库,我用的Python3.5,所以sudo pip3 install jieba进行安装2. 检测安装是否成功zhangqi@ThinkPad-X250:~$ python3.5Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linuxType "help", "co...

2019-03-23 23:55:16 691

原创 TensoFlow损失函数tf.layers.dropout与tf.nn.dropout的区别

TensorFlow1.0中有两个损失函数,tf.layers.dropout与tf.nn.dropout,两个函数的丢弃概率恰好相反,如果不仔细,很容易搞错。tf.nn.dropout 中参数 keep_prob :每一个元素被保存下的概率。而 tf.layer.dropout 中参数 rate :每一个元素丢弃的概率。所以,keep_prob = 1 - rate。 在 tf.layer...

2019-01-27 01:49:53 1351 1

原创 机器学习之激励函数

test

2018-12-10 21:03:38 437 1

原创 机器学习之损失函数

test

2018-12-10 21:02:52 129

原创 TensorFlow基础之线性回归

线性回归,我们在初中就开始接触了,二维平面给出一些点,用一条直线拟合这些点。但实际情况下,这些点中都会有一些噪点、误差,那么怎么才能找出一条拟合度最好的直线呢?比如下图是y=2x+4的点,随机加入一些误差后怎么才能得到拟合最好的直线。                            要判断好还是不好,首先要有一个度量指标,其次这个指标可以容易转换成数学运算。这里引出一种方法:最小二乘...

2018-08-29 20:38:44 1883

原创 dll中接口中使用std::string和std::vector

最近在windows下封装dll给客户,接口参数类型都是std::string,直接在release模式下生成,客户也没什么反馈。但是自己线下在debug模型下测试的时候参数始终传递不过去,调试觉得内存很诡异。结果就是:STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释。...

2018-08-09 19:26:17 2077

原创 C++实现反射机制

话不多说,先上段代码的运行结果:class TestA:public Object{ DECLARE_CLASS()public: TestA() {std::cout << "TestA constructor" << std::endl;} ~TestA(){std::cout << "TestA destructor" << std::endl;}};IMPLEMENT_

2016-11-29 18:17:49 2906

原创 Python拷贝对象(浅拷贝copy与深拷贝deepcopy)

先说一段废话。Python中的参数传递都是对象引用传递,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值”来传递对象。Python通过引用计数机制实现自动垃圾回收功能,Python中的每个

2016-10-22 00:17:04 4026

原创 python TCPServer, StreamRequestHandler设置超时时间timeout

先来大概说一下,网络编程中总是分不开服务器和客户端,所谓的超时也分两种情况,一种是服务器等待客户端连接超时,一种是服务器处理客户端请求超时(可以理解为sever和handle),这两种情况要分别对待。先来看看等待连接超时的server timeoutpython对服务器也有简单的封装,先看看文档。 +------------+ | BaseServer

2016-10-16 14:48:07 10053

原创 python用 GET,POST,PUT,DELETE方式向HTTP提交数据

、JSON简介JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言

2016-10-15 16:11:01 8876 1

原创 wireshark中rtmp协议用80端口时显示成tcp

大家知道,80端口默认是http协议,所以wireshark会讲80端口上的默认数据解析成http协议。但是有时候我们也会把其他协议端口也指定成80端口,比如rtmp协议,这个时候用wireshark抓包时,会将rtmp解析成http,由于解析不成功,那就显示成tcp了,具体解决方法如下:

2016-10-09 19:57:54 2524

原创 nginx中的定时器

nginx中到处充斥着定时器,那么nginx中的定时器是怎么来管理的?是不是每个定时都要检查是否超时?要是这样,那效率太低下了,细读源码来看看nginx中的定时器是怎么样的。首先来一个大概的认识:nginx中的定时器是放在一个全局的叫做ngx_event_timer_rbtree的红黑树中的,通过ngx_add_timer来添加定时器,等超时定时事件执行完后就从红黑树中移除该定时器,所以想要达

2016-09-07 17:32:41 4326

原创 python中的函数式编程——apply, filter, map, reduce

什么是函数式编程?没有深入了解过,Scala就是函数式编程的语言,暂时可以把lambda当做是函数式编程python有几个内建函数——apply, filter, map, reduce,这些函数的输入参数通常会有一个函数或者lambda表达式,类似于C++的函数指针。apply已经废弃了,所以就不再研究了。1、filter(bool_func, seq)filter是过滤的意思,

2016-03-26 18:36:13 1464

原创 HTTP中的Host字段

说白了,HTTP还是TCP协议,所以发起http请求也就是建立TCP连接并发送的过程,也就是说connect-->send。 TCP在connect的时候必须要知道对方我IP地址和监听端口。比如我们要发起对www.baidu.com的请求,那第一步就是得到www.baidu.com对应的IP地址,然后connect,进而send。 在http1.1中新增了一个Host头,那大家

2016-03-01 21:11:26 25661 3

原创 Python面试题总结

觉得看面试题能够快速提高技能1、Python是如何进行内存管理的?Python的内存管理主要有三种机制:引用计数机制、垃圾回收机制和内存池机制。a. 引用计数当给一个对象分配一个新名称或者将一个对象放入一个容器(列表、元组或字典)时,该对象的引用计数都会增加。当使用del对对象显示销毁或者引用超出作用于或者被重新赋值时,该对象的引用计数就会减少。可以

2016-02-01 10:42:01 854

原创 UDP调用connect

大家都知道,在建立TCP连接时需要connect,但UDP调用connect又是什么情况。    在普通的UDP中,我们都是用sendto和recvfrom来收发消息的,这两个函数都有一个sockaddr_in参数,参数里面存放的就是目的端的ip和端口,而TCP的send和recv就不需要这些参数,为什么呢?稍微一想我们就知道,TCP在发送数据的时候已经建立了连接,所以不需要目的端的ip和

2016-02-01 10:40:27 608

原创 堆排序解析

首先要了解堆的性质,我这里简答总结一下(这里说的是小堆):1、堆是一棵完全二叉树2、对于大堆中的任何一个非叶子节点,节点的值必须小于左右孩子节点值。由此可知,对于小堆而言,根节点就是最小值了,那么我们每次拿走根节点,拿走的顺序就是递增序列的。排序的元素在数组中,而堆也是一棵完全二叉树,所以直接用数组表示二叉树。对于完全二叉树中的K节点,其满足一下性质:1、K节点的父节点

2016-02-01 10:39:33 340

原创 Linux共享内存使用常见陷阱与分析

所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。共享内存的使用大大降低了在大规模数

2016-02-01 10:38:29 584

原创 const int a = 10; int *p = (int *)&a; *p = 100; a的值到底有没有改变

[cpp] view plaincopyconst int a = 10;  int *p = (int *)&a;  *p = 100;  很多人面试的时候都会被问这段代码最后a和*p分别是多少。答案不过三种:要么程序报错,要么a=10,*p=100,要么a=100,*p=100;其实这个地方是分const变量是全局还是局部的情况,先看局部情况

2016-02-01 10:37:37 2115

原创 TCP初始化序列号ISN

TCP初始化序列号不能设置为一个固定值,因为这样容易被攻击者猜出后续序列号,从而遭到攻击。RFC1948中提出了一个较好的初始化序列号ISN随机生成算法。ISN = M + F(localhost, localport, remotehost, remoteport).M是一个计时器,这个计时器每隔4毫秒加1。F是一个Hash算法,根据源IP、目的IP、源端口、目的

2016-02-01 10:36:32 9815 2

原创 winpcap实现从TCP三次握手到发送http请求

之前的文章我都是贴出了协议的格式,对具体字段没有具体说明,今天在这里补充一下。[cpp] view plain copy/*                       IP报文格式 0            8           16                        32 +------------+--------

2016-01-30 20:51:58 874

原创 TCP中用到的定时器

TCP为每条连接建立七个定时器:        1、连接建立定时器在发送SYN报文段建立一条新连接时启动。如果没有在75秒内收到响 应,连接建立将中止。当TCP实例将其状态从LISTEN更改为SYN_RECV的时侯就会使用这一计时器.服务端的TCP实例最初会等待一个ACK三秒钟.如果在这一段时间没有ACK到达,则认为该连接请求是过期的。        2、重传定时器在TCP发送数据时设定.

2016-01-30 20:50:00 362

原创 awk截取字符串

分隔字符串分三种情况,一种是分隔符是空格,一种是非空格,还有一种是多个字符作为分隔符先来创建一个文件吧:[plain] view plaincopyNam   Chinese     Math       English  Tom      80        90           100  Jack     83    

2016-01-25 15:49:43 1134

原创 shell编程之sort 命令详解

1 sort的工作原理sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。[plain]view plaincopy[rocrocket@rocrocketprogramming]$catseq.txtbananaapplepea

2016-01-25 15:48:56 470

原创 浅谈获取shell中函数的返回值

首先看看怎么获取命令的返回值,根据linux标准,返回0就是正确,非0就是错误的原则,只要命令执行正确,返回的一般都是0,那么怎么获取命令的返回值??用位置参数 $?$? 获取上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)[plain] view plaincopyls -l  a

2016-01-25 15:46:41 522

windows环境下TensorFlow1,.8动态库,Release-3.zip

花了好久才编成功,亲测可用,希望能帮到大家,有问题可以联系164529140,由于上传资源限制,分3个文件上传,这是文件3

2019-07-20

windows环境下TensorFlow1,.8动态库,Release-1.zip

花了好久才编成功,亲测可用,希望能帮到大家,有问题可以联系164529140,由于上传资源限制,分3个文件上传,这是文件1

2019-07-20

手写数字测试集.tar.tz

将mnist的数据集还原成图片形式,可以直观查看。 在使用TensorFlow或者keras中使用mnist时,并不能直观体验数据图片,这里做了一个图形还原

2018-09-12

mnist手写数字训练集

将mnist的数据集还原成图片形式,可以直观查看。 在使用TensorFlow或者keras中使用mnist时,并不能直观体验数据图片,这里做了一个图形还原

2018-09-11

MSN消息声音 可用在QQ

从MSN提取的 消息声音 很好听的 MSN消息声音

2015-09-05

C、C++编程指南

C、C++编程指南

2015-09-05

最新JAVA编程题全集_50题及答案

写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba import java.util.ArrayList; import java.util.List; public class NumTest { public static void main(String[] args) { String s="ABCD";//原字符串 List<String> result = list(s, "");//列出字符的组合,放入result System.out.println(result.size());; System.out.println(result); } /** * 列出基础字符串(base)的所有组合 * @param base 以该字符串作为基础字符串,进行选择性组合。 * @param buff 所求字符串的临时结果 * @param result 存放所求结果 */ public static List<String> list(String base,String buff){ List<String> result = new ArrayList<String>();//存放结果信息。 if(base.length()<=0){ result.add(buff); } for(int i=0;i<base.length();i++){ List<String> temp = list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i)); result.addAll(temp); } return result; } } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public static void main(String[] args) { String s="ABCD";//原字符串 List<String> result = new ArrayList<String>();//存放结果信息。 list(s, "", result);//列出字符的组合,放入result System.out.println(result.size());; System.out.println(result); } /** * 列出基础字符串(base)的所有组合 * @param base 以该字符串作为基础字符串,进行选择性组合。 * @param buff 所求字符串的临时结果 * @param result 存放所求结果 */ public static void list(String base,String buff,List<String> result){ if(base.length()<=0){ result.add(buff); } for(int i=0;i<base.length();i++){ list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i),result); } } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 写一个函数,给你一个字符串 倒序输出来 public String getString(String str){ if(str!=null){ String newStr = ""; for(int i=0;i<str.length();i++) { char c = str.charAt(str.length()-1-i); newStr = newStr + c; } return newStr; }else{ return null; } } 不使用中间变量 把两个变量的值互换 int a=10; int b=100; a=a*b; b=a/b; a=a/b; System.out.print("a="+a+" b="+b); 折半查找 public class Test { public static int[] data = { 12, 15, 20, 10, 19, 3, 89, 32, 39, 47, 55 }; // 原始数据 public static int counter = 1; // 计数器 public static int len = data.length; public static void main(String args[]) { //要查找的数 int keyValue = 89; Test t = new Test(); boolean b = t.BinarySearch(keyValue); if(b) { // 输出查找次数 System.out.println("Search Time = " + counter); }else { // 输出没有找到数据 System.out.println("No Found!!"); } } // --------------------------------------------------- // 折半查找法 public static boolean BinarySearch(int keyValue) { int left; // 左边界变量 int right; // 右边界变量 int middle; // 中位数变量 System.out.println("数据长度:"+len); left = 0; right = len - 1; while (left <= right) { //由于源数据不是顺序的,需先进行排序 int temp; for(int i=0;i<data.length;++i) { for(int j=0;j<data.length-i-1;++j) { if(data[j]>data[j+1]) { temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; } } } middle = (left + right) / 2; // 欲查找值较小 if (keyValue < data[middle]) { right = middle - 1; // 查找前半段 } // 欲查找值较大 else if (keyValue > data[middle]) { left = middle + 1; // 查找后半段 } // 查找到数据 else if (keyValue == data[middle]) { System.out.println("data[" + middle + "] = " + data[middle]); return true; } counter++; } return false; } } 1. 将this is a test 转化为This Is A Test String str="this is a man"; char c[]=new char[str.length()]; str.getChars(0,str.length(),c,0); if(c[0]>='a'&&c[0]<='z') { c[0]=(char)(c[0]-32); } for(int i=1;i<=c.length-1;i++) { if(c[i]==' ') { c[i+1]=(char)(c[i+1]-32); } } str=new String(c); System.out.print(str); 2. 将This is a test倒着输出tset a si sihT (用StringBuffer) String str="this is a man"; StringBuffer sb=new StringBuffer(str.length()); for(int j = str.length()-1;j>=0;j--) { sb.append(str.charAt(j)); } System.out.print(sb); 3. 用递归求N!=N*(N-1)*(N-2)*...*2*1; long digui(int i) {if(i==0||i==1) { return 1; } else { return i*digui(i-1); } } 4. 写一个单例模式(遇到两次) public class Test { private Test(){} private static Test test; public static Test getInstance() { if(test==null) { test = new Test(); } return test; }} 5. //统计字符串的个数 "I'm go to swimming" // I:1 // ':1 // m:3 // 空格:3 // g:2// ... String str = "I'm go to swimming"; Set<String> set = new HashSet<String>(); for(int i=0;i<str.length();i++){ String s = str.substring(i,i+1); set.add(s); } Iterator it = set.iterator(); while(it.hasNext()) { String sr =(String)it.next(); int k=0; for(int j=0;j<str.length();j++){ if(sr.equals(str.substring(j,j+1))){ k++; } } System.out.println(s + "有" + k + "个"); } 6. 对字母进行排序,如:s,a,g,d,b; String s = "sagdb"; List t = new ArrayList(); for(int i=0;i<s.length();i++) { String xx = s.substring(i,i+1); t.add(xx); } java.util.Collections.sort(t); System.out.println(t); 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i<=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); }}} 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=101; i<200; i+=2) { boolean b = false; for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) { b = false; break; } else { b = true; } } if(b == true) {count ++;System.out.println(i );} } System.out.println( "素数个数是: " + count); }} 【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 public class lianxi03 { public static void main(String[] args) { int b1, b2, b3; for(int m=101; m<1000; m++) { b3 = m / 100; b2 = m % 100 / 10; b1 = m % 10; if((b3*b3*b3 + b2*b2*b2 + b1*b1*b1) == m) { System.out.println(m+"是一个水仙花数"); } }}} 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 import java.util.*; public class lianxi04{ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print( "请键入一个正整数: "); int n = s.nextInt(); int k=2; System.out.print(n + "=" ); while(k <= n) { if(k == n) {System.out.println(n);break;} else if( n % k == 0) {System.out.print(k + "*");n = n / k; } else k++; } } } 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 import java.util.*; public class lianxi05 { public static void main(String[] args) { int x; char grade; Scanner s = new Scanner(System.in); System.out.print( "请输入一个成绩: "); x = s.nextInt(); grade = x >= 90 ? 'A' : x >= 60 ? 'B' :'C'; System.out.println("等级为:"+grade); }} 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 /**在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。* / import java.util.*; public class lianxi06 { public static void main(String[] args) { int a ,b,m; Scanner s = new Scanner(System.in); System.out.print( "键入一个整数: "); a = s.nextInt(); System.out.print( "再键入一个整数: "); b = s.nextInt(); deff cd = new deff(); m = cd.deff(a,b); int n = a * b / m; System.out.println("最大公约数: " + m); System.out.println("最小公倍数: " + n); } } class deff{ public int deff(int x, int y) { int t; if(x < y) { t = x; x = y; y = t; } while(y != 0) { if(x == y) return x; else { int k = x % y; x = y; y = k; } } return x; }} 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 import java.util.*; public class lianxi07 { public static void main(String[] args) { int digital = 0; int character = 0; int other = 0; int blank = 0; char[] ch = null; Scanner sc = new Scanner(System.in); String s = sc.nextLine(); ch = s.toCharArray(); for(int i=0; i<ch.length; i++) { if(ch >= '0' && ch <= '9') { digital ++; } else if((ch >= 'a' && ch <= 'z') || ch > 'A' && ch <= 'Z') { character ++; } else if(ch == ' ') { blank ++; } else { other ++; } } System.out.println("数字个数: " + digital); System.out.println("英文字母个数: " + character); System.out.println("空格个数: " + blank); System.out.println("其他字符个数:" + other ); }} 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 import java.util.*; public class lianxi08 { public static void main(String[] args) { long a , b = 0, sum = 0; Scanner s = new Scanner(System.in); System.out.print("输入数字a的值: "); a = s.nextInt(); System.out.print("输入相加的项数:"); int n = s.nextInt(); int i = 0; while(i < n) { b = b + a; sum = sum + b; a = a * 10; ++ i; } System.out.println(sum); }} 【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。 public class lianxi09 { public static void main(String[] args) { System.out.println("1到1000的完数有: "); for(int i=1; i<1000; i++) { int t = 0; for(int j=1; j<= i/2; j++) { if(i % j == 0) { t = t + j; } } if(t == i) { System.out.print(i + " "); } }} 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? public class lianxi10 { public static void main(String[] args) { double h = 100,s = 100; for(int i=1; i<10; i++) { s = s + h; h = h / 2; } System.out.println("经过路程:" + s); System.out.println("反弹高度:" + h / 2); }} 【程序11】 题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? public class lianxi11 { public static void main(String[] args) { int count = 0; for(int x=1; x<5; x++) { for(int y=1; y<5; y++) { for(int z=1; z<5; z++) { if(x != y && y != z && x != z) { count ++; System.out.println(x*100 + y*10 + z ); } } } } System.out.println("共有" + count + "个三位数"); }} 【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数? import java.util.*; public class lianxi12 { public static void main(String[] args) { double x = 0,y = 0; System.out.print("输入当月利润(万):"); Scanner s = new Scanner(System.in); x = s.nextInt(); if(x > 0 && x <= 10) { y = x * 0.1; } else if(x > 10 && x <= 20) { y = 10 * 0.1 + (x - 10) * 0.075; } else if(x > 20 && x <= 40) { y = 10 * 0.1 + 10 * 0.075 + (x - 20) * 0.05; } else if(x > 40 && x <= 60) { y = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (x - 40) * 0.03; } else if(x > 60 && x <= 100) { y = 20 * 0.175 + 20 * 0.05 + 20 * 0.03 + (x - 60) * 0.015; } else if(x > 100) { y = 20 * 0.175 + 40 * 0.08 + 40 * 0.015 + (x - 100) * 0.01; } System.out.println("应该提取的奖金是 " + y + "万"); }} 【程序13】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? public class lianxi13 { public static void main(String[] args) { for(int x =1; x<100000; x++) { if(Math.sqrt(x+100) % 1 == 0) { if(Math.sqrt(x+268) % 1 == 0) { System.out.println(x + "加100是一个完全平方数,再加168又是一个完全平方数"); } } }}} /*按题意循环应该从-100开始(整数包括正整数、负整数、零),这样会多一个满足条件的数-99。 但是我看到大部分人解这道题目时都把题中的“整数”理解成正整数,我也就随大流了。*/ 【程序14】 题目:输入某年某月某日,判断这一天是这一年的第几天? import java.util.*; public class lianxi14 { public static void main(String[] args) { int year, month, day; int days = 0; int d = 0; int e; input fymd = new input(); do { e = 0; System.out.print("输入年:"); year =fymd.input(); System.out.print("输入月:"); month = fymd.input(); System.out.print("输入天:"); day = fymd.input(); if (year < 0 || month < 0 || month > 12 || day < 0 || day > 31) { System.out.println("输入错误,请重新输入!"); e=1 ; } }while( e==1); for (int i=1; i <month; i++) { switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) { days = 29; } else { days = 28; } break; } d += days; } System.out.println(year + "-" + month + "-" + day + "是这年的第" + (d+day) + "天。"); } } class input{ public int input() { int value = 0; Scanner s = new Scanner(System.in); value = s.nextInt(); return value; }} 【程序15】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 import java.util.*; public class lianxi15 { public static void main(String[] args) { input fnc = new input(); int x=0, y=0, z=0; System.out.print("输入第一个数字:"); x = fnc.input(); System.out.print("输入第二个数字:"); y = fnc.input(); System.out.print("输入第三个数字:"); z = fnc.input(); if(x > y) { int t = x; x = y; y = t; } if(x > z) { int t = x; x = z; z = t; } if(y > z) { int t = y; y = z; z = t; } System.out.println( "三个数字由小到大排列为: "+x + " " + y + " " + z); } } class input{ public int input() { int value = 0; Scanner s = new Scanner(System.in); value = s.nextInt(); return value; }} 【程序16】 题目:输出9*9口诀。 public class lianxi16 { public static void main(String[] args) { for(int i=1; i<10; i++) { for(int j=1; j<=i; j++) { System.out.print(j + "*" + i + "=" + j*i + " " ); if(j*i<10){System.out.print(" ");} } System.out.println(); } }} 【程序17】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 public class lianxi17 { public static void main(String[] args) { int x = 1; for(int i=2; i<=10; i++) { x = (x+1)*2; } System.out.println("猴子第一天摘了 " + x + " 个桃子"); }} 【程序18】 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 public class lianxi18 { static char[] m = { 'a', 'b', 'c' }; static char[] n = { 'x', 'y', 'z' }; public static void main(String[] args) { for (int i = 0; i < m.length; i++) { for (int j = 0; j < n.length; j++) { if (m[i] == 'a' && n[j] == 'x') { continue; } else if (m[i] == 'a' && n[j] == 'y') { continue; } else if ((m[i] == 'c' && n[j] == 'x') || (m[i] == 'c' && n[j] == 'z')) { continue; } else if ((m[i] == 'b' && n[j] == 'z') || (m[i] == 'b' && n[j] == 'y')) { continue; } else System.out.println(m[i] + " vs " + n[j]); } } } } 【程序19】 题目:打印出如下图案(菱形) * *** ***** ******* ***** *** * public class lianxi19 { public static void main(String[] args) { int H = 7, W = 7;//高和宽必须是相等的奇数 for(int i=0; i<(H+1) / 2; i++) { for(int j=0; j<W/2-i; j++) { System.out.print(" "); } for(int k=1; k<(i+1)*2; k++) { System.out.print('*'); } System.out.println(); } for(int i=1; i<=H/2; i++) { for(int j=1; j<=i; j++) { System.out.print(" "); } for(int k=1; k<=W-2*i; k++) { System.out.print('*'); } System.out.println(); } }} 【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 public class lianxi20 { public static void main(String[] args) { int x = 2, y = 1, t; double sum = 0; for(int i=1; i<=20; i++) { sum = sum + (double)x / y; t = y; y = x; x = y + t; } System.out.println("前20项相加之和是: " + sum); }} 【程序21】 题目:求1+2!+3!+...+20!的和 public class lianxi21 { public static void main(String[] args) { long sum = 0; long fac = 1; for(int i=1; i<=20; i++) { fac = fac * i; sum += fac; } System.out.println(sum); }} 【程序22】 题目:利用递归方法求5!。 public class lianxi22 { public static void main(String[] args) { int n = 5; rec fr = new rec(); System.out.println(n+"! = "+fr.rec(n)); } } class rec{ public long rec(int n) { long value = 0 ; if(n ==1 ) { value = 1; } else { value = n * rec(n-1); } return value; }} 【程序23】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? public class lianxi23 { public static void main(String[] args) { int age = 10; for(int i=2; i<=5; i++) { age =age+2; } System.out.println(age); }} 【程序24】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 //使用了长整型最多输入18位 import java.util.*; public class lianxi24 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个正整数:"); long a = s.nextLong(); String ss = Long.toString(a); char[] ch = ss.toCharArray(); int j=ch.length; System.out.println(a + "是一个"+ j +"位数。"); System.out.print("按逆序输出是:"); for(int i=j-1; i>=0; i--) { System.out.print(ch[i]); } } } 【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 import java.util.*; public class lianxi25 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int a; do{ System.out.print("请输入一个5位正整数:"); a = s.nextInt(); }while(a<10000||a>99999); String ss =String.valueOf(a); char[] ch = ss.toCharArray(); if(ch[0]==ch[4]&&ch[1]==ch[3]){ System.out.println("这是一个回文数");} else {System.out.println("这不是一个回文数");} } } //这个更好,不限位数 import java.util.*; public class lianxi25a { public static void main(String[] args) { Scanner s = new Scanner(System.in); boolean is =true; System.out.print("请输入一个正整数:"); long a = s.nextLong(); String ss = Long.toString(a); char[] ch = ss.toCharArray(); int j=ch.length; for(int i=0; i<j/2; i++) { if(ch[i]!=ch[j-i-1]){is=false;} } if(is==true){System.out.println("这是一个回文数");} else {System.out.println("这不是一个回文数");} } } 【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 import java.util.*; public class lianxi26 { public static void main(String[] args) { getChar tw = new getChar(); System.out.println("请输入星期的第一个大写字母:"); char ch = tw.getChar(); switch(ch) { case 'M': System.out.println("Monday"); break; case 'W': System.out.println("Wednesday"); break; case 'F': System.out.println("Friday"); break; case 'T': { System.out.println("请输入星期的第二个字母:"); char ch2 = tw.getChar(); if(ch2 == 'U') {System.out.println("Tuesday"); } else if(ch2 == 'H') {System.out.println("Thursday"); } else {System.out.println("无此写法!"); } }; break; case 'S': { System.out.println("请输入星期的第二个字母:"); char ch2 = tw.getChar(); if(ch2 == 'U') {System.out.println("Sunday"); } else if(ch2 == 'A') {System.out.println("Saturday"); } else {System.out.println("无此写法!"); } }; break; default:System.out.println("无此写法!"); } } } class getChar{ public char getChar() { Scanner s = new Scanner(System.in); String str = s.nextLine(); char ch = str.charAt(0); if(ch<'A' || ch>'Z') { System.out.println("输入错误,请重新输入"); ch=getChar(); } return ch; }} 【程序27】 题目:求100之内的素数 //使用除sqrt(n)的方法求出的素数不包括2和3 public class lianxi27 { public static void main(String[] args) { boolean b =false; System.out.print(2 + " "); System.out.print(3 + " "); for(int i=3; i<100; i+=2) { for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) {b = false; break; } else{b = true;} } if(b == true) {System.out.print(i + " ");} } } } //该程序使用除1位素数得2位方法,运行效率高通用性差。 public class lianxi27a { public static void main(String[] args) { int[] a = new int[]{2, 3, 5, 7}; for(int j=0; j<4; j++)System.out.print(a[j] + " "); boolean b =false; for(int i=11; i<100; i+=2) { for(int j=0; j<4; j++) { if(i % a[j] == 0) {b = false; break; } else{b = true;} } if(b == true) {System.out.print(i + " ");} } } } 【程序28】 题目:对10个数进行排序 import java.util.*; public class lianxi28 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int[] a = new int[10]; System.out.println("请输入10个整数:"); for(int i=0; i<10; i++) { a[i] = s.nextInt(); } for(int i=0; i<10; i++) { for(int j=i+1; j<10; j++) { if(a[i] > a[j]) { int t = a[i]; a[i] = a[j]; a[j] = t; } } } for(int i=0; i<10; i++) { System.out.print(a[i] + " "); } } } 【程序29】 题目:求一个3*3矩阵对角线元素之和 import java.util.*; public class lianxi29 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int[][] a = new int[3][3]; System.out.println("请输入9个整数:"); for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { a[i][j] = s.nextInt(); } } System.out.println("输入的3 * 3 矩阵是:"); for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } int sum = 0; for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { if(i == j) { sum += a[i][j]; } } } System.out.println("对角线之和是:" + sum); }} 【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 //此程序不好,没有使用折半查找插入 import java.util.*; public class lianxi30 { public static void main(String[] args) { int[] a = new int[]{1, 2, 6, 14, 25, 36, 37,55}; int[] b = new int[a.length+1]; intt1=0,t=0; int i =0; Scanner s= new Scanner(System.in); System.out.print("请输入一个整数:"); int num = s.nextInt(); if(num >= a[a.length-1]) { b[b.length-1] = num; for(i=0; i<a.length; i++) { b[i] = a[i]; } } else { for(i=0; i<a.length; i++) { if(num >= a[i]) { b[i] = a[i]; } else { b[i] = num; break; } } for(int j=i+1; j<b.length; j++) { b[j] = a[j-1]; } } for (i = 0; i < b.length; i++) { System.out.print(b[i] + " "); }} } 【程序31】 题目:将一个数组逆序输出。 import java.util.*; public class lianxi31 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int a[] = new int[20]; System.out.println("请输入多个正整数(输入-1表示结束):"); int i=0,j; do{ a[i]=s.nextInt(); i++; }while (a[i-1]!=-1); System.out.println("你输入的数组为:"); for( j=0; j<i-1; j++) { System.out.print(a[j]+" "); } System.out.println("\n数组逆序输出为:"); for( j=i-2; j>=0; j=j-1) { System.out.print(a[j]+" "); } } } 【程序32】 题目:取一个整数a从右端开始的4~7位。 import java.util.*; public class lianxi32 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个7位以上的正整数:"); long a = s.nextLong(); String ss = Long.toString(a); char[] ch = ss.toCharArray(); int j=ch.length; if (j<7){System.out.println("输入错误!");} else { System.out.println("截取从右端开始的4~7位是:"+ch[j-7]+ch[j-6]+ch[j-5]+ch[j-4]); } } } 【程序33】 题目:打印出杨辉三角形(要求打印出10行如下图) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ………… public class lianxi33 { public static void main(String[] args) { int[][] a = new int[10][10]; for(int i=0; i<10; i++) { a[i][i] = 1; a[i][0] = 1; } for(int i=2; i<10; i++) { for(int j=1; j<i; j++) { a[i][j] = a[i-1][j-1] + a[i-1][j]; } } for(int i=0; i<10; i++) { for(int k=0; k<2*(10-i)-1; k++) { System.out.print(" "); } for(int j=0; j<=i; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } }} 【程序34】 题目:输入3个数a,b,c,按大小顺序输出。 import java.util.Scanner; public class lianxi34 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入3个整数:"); int a = s.nextInt(); int b = s.nextInt(); int c = s.nextInt(); if(a < b) { int t = a; a = b; b = t; } if(a < c) { int t = a; a = c; c = t; } if(b < c) { int t = b; b = c; c = t; } System.out.println("从大到小的顺序输出:"); System.out.println(a + " " + b + " " + c); }} 【程序35】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 import java.util.*; public class lianxi35 { public static void main(String[] args) { int N = 8; int[] a = new int [N]; Scanner s = new Scanner(System.in); int idx1 = 0, idx2 = 0; System.out.println("请输入8个整数:"); for(int i=0; i<N; i++) { a[i] = s.nextInt(); } System.out.println("你输入的数组为:"); for(int i=0; i<N; i++) { System.out.print(a[i] + " "); } int max =a[0], min = a[0]; for(int i=0; i<N; i++) { if(a[i] > max) { max = a[i]; idx1 = i; } if(a[i] < min) { min = a[i]; idx2 = i; } } if(idx1 != 0) { int temp = a[0]; a[0] = a[idx1]; a[idx1] = temp; } if(idx2 != N-1) { int temp = a[N-1]; a[N-1] = a[idx2]; a[idx2] = temp; } System.out.println("\n交换后的数组为:"); for(int i=0; i<N; i++) { System.out.print(a[i] + " "); } }} 【程序36】 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 import java.util.Scanner; public class lianxi36 { public static void main(String[] args) { int N =10; int[] a = new int[N]; Scanner s = new Scanner(System.in); System.out.println("请输入10个整数:"); for(int i=0; i<N; i++) { a[i] = s.nextInt(); } System.out.print("你输入的数组为:"); for(int i=0; i<N; i++) { System.out.print(a[i] + " "); } System.out.print("\n请输入向后移动的位数:"); int m = s.nextInt(); int[] b = new int[m]; for(int i=0; i<m; i++) { b[i] = a[N-m+i]; } for(int i=N-1; i>=m; i--) { a[i] = a[i-m]; } for(int i=0; i<m; i++) { a[i] = b[i]; } System.out.print("位移后的数组是:"); for(int i=0; i<N; i++) { System.out.print(a[i] + " "); } }} 【程序37】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 import java.util.Scanner; public class lianxi37 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入排成一圈的人数:"); int n = s.nextInt(); boolean[] arr = new boolean[n]; for(int i=0; i<arr.length; i++) { arr[i] = true; } int leftCount = n; int countNum = 0; int index = 0; while(leftCount > 1) { if(arr[index] == true) { countNum ++; if(countNum == 3) { countNum =0; arr[index] = false; leftCount --; } } index ++; if(index == n) { index = 0; } } for(int i=0; i<n; i++) { if(arr[i] == true) { System.out.println("原排在第"+(i+1)+"位的人留下了。"); } } }} 【程序38】 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 /*……………… *……题目意思似乎不能用length()函数 */ import java.util.*; public class lianxi38 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入一个字符串:"); String str = s.nextLine(); System.out.println("字符串的长度是:"+str.length()); } } 【程序39】 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) //没有利用指针函数 import java.util.*; public class lianxi39 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个正整数 n= "); int n = s.nextInt(); System.out.println("相应数列的和为:" + sum(n)); } public static double sum(int n) { double res = 0; if(n % 2 == 0) { for(int i=2; i<=n; i+=2) { res += (double)1 / i; } } else { for(int i=1; i<=n; i+=2) { res += (double)1 / i ; } } return res; } } 【程序40】 题目:字符串排序。 public class lianxi40 { public static void main(String[] args) { int N=5; String temp = null; String[] s = new String[N]; s[0] = "matter"; s[1] = "state"; s[2] = "solid"; s[3] = "liquid"; s[4] = "gas"; for(int i=0; i<N; i++) { for(int j=i+1; j<N; j++) { if(compare(s[i], s[j]) == false) { temp = s[i]; s[i] = s[j]; s[j] = temp; } } } for(int i=0; i<N; i++) { System.out.println(s[i]); } } static boolean compare(String s1, String s2) { boolean result = true; for(int i=0; i<s1.length() && i<s2.length(); i++) { if(s1.charAt(i) > s2.charAt(i)) { result = false; break; } else if(s1.charAt(i) <s2.charAt(i)) { result = true; break; } else { if(s1.length() < s2.length()) { result = true; } else { result = false; } } } return result; }} 【程序41】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? public class lianxi41 { public static void main (String[] args) { int i,m,j=0,k,count; for(i=4;i<10000;i+=4) { count=0; m=i; for(k=0;k<5;k++) { j=i/4*5+1; i=j; if(j%4==0) count++; else break; } i=m; if(count==4) {System.out.println("原有桃子 "+j+" 个"); break;} } } } 【程序42】 题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。 //题目错了!809x=800x+9x+1 这样的方程无解。去掉那个1就有解了。 public class lianxi42 { public static void main (String[] args) { int a=809,b,i; for(i=10;i<13;i++) {b=i*a ; if(8*i<100&&9*i>=100) System.out.println ("809*"+i+"="+"800*"+i+"+"+"9*"+i+"="+b);} }} 【程序43】 题目:求0—7所能组成的奇数个数。 //组成1位数是4个。 //组成2位数是7*4个。 //组成3位数是7*8*4个。 //组成4位数是7*8*8*4个。 //...... public class lianxi43 { public static void main (String[] args) { int sum=4; int j; System.out.println("组成1位数是 "+sum+" 个"); sum=sum*7; System.out.println("组成2位数是 "+sum+" 个"); for(j=3;j<=9;j++){ sum=sum*8; System.out.println("组成"+j+"位数是 "+sum+" 个"); }}} 【程序44】 题目:一个偶数总能表示为两个素数之和。 //由于用除sqrt(n)的方法求出的素数不包括2和3, //因此在判断是否是素数程序中人为添加了一个3。 import java.util.*; public class lianxi44 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n,i; do{ System.out.print("请输入一个大于等于6的偶数:"); n = s.nextInt(); } while(n<6||n%2!=0); //判断输入是否是>=6偶数,不是,重新输入 fun fc = new fun(); for(i=2;i<=n/2;i++){ if((fc.fun(i))==1&&(fc.fun(n-i)==1)) {int j=n-i; System.out.println(n+" = "+i+" + "+j); } //输出所有可能的素数对 } } } class fun{ public int fun (int a) //判断是否是素数的函数 { int i,flag=0; if(a==3){flag=1;return(flag);} for(i=2;i<=Math.sqrt(a);i++){ if(a%i==0) {flag=0;break;} else flag=1;} return (flag) ;//不是素数,返回0,是素数,返回1 }} //解法二 import java.util.*; public class lianxi44 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n; do{ System.out.print("请输入一个大于等于6的偶数:"); n = s.nextInt(); } while(n<6||n%2!=0); //判断输入是否是>=6偶数,不是,重新输入 for(int i=3;i<=n/2;i+=2){ if(fun(i)&&fun(n-i)) { System.out.println(n+" = "+i+" + "+(n-i)); } //输出所有可能的素数对 } } static boolean fun (int a){ //判断是否是素数的函数 boolean flag=false; if(a==3){flag=true;return(flag);} for(int i=2;i<=Math.sqrt(a);i++){ if(a%i==0) {flag=false;break;} else flag=true;} return (flag) ; }} 【程序45】 题目:判断一个素数能被几个9整除 //题目错了吧?能被9整除的就不是素数了!所以改成整数了。 import java.util.*; public class lianxi45 { public static void main (String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个整数:"); int num = s.nextInt(); int tmp = num; int count = 0; for(int i = 0 ; tmp%9 == 0 ;){ tmp = tmp/9; count ++; } System.out.println(num+" 能够被 "+count+" 个9整除。"); } } 【程序46】 题目:两个字符串连接程序 import java.util.*; public class lianxi46 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个字符串:"); String str1 = s.nextLine(); System.out.print("请再输入一个字符串:"); String str2 = s.nextLine(); String str = str1+str2; System.out.println("连接后的字符串是:"+str); } } 【程序47】 题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。 import java.util.*; public class lianxi47 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n=1,num; while(n<=7){ do{ System.out.print("请输入一个1--50之间的整数:"); num= s.nextInt(); }while(num<1||num>50); for(int i=1;i<=num;i++) {System.out.print("*"); } System.out.println(); n ++; }}} 【程序48】 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 import java.util.*; public class lianxi48 { public static void main(String args[]) { Scanner s = new Scanner(System.in); int num=0,temp; do{ System.out.print("请输入一个4位正整数:"); num = s.nextInt(); }while (num<1000||num>9999); int a[]=new int[4]; a[0] = num/1000; //取千位的数字 a[1] = (num/100); //取百位的数字 a[2] = (num/10); //取十位的数字 a[3] = num; //取个位的数字 for(int j=0;j<4;j++) { a[j]+=5; a[j]%=10; } for(int j=0;j<=1;j++) { temp = a[j]; a[j] = a[3-j]; a[3-j] =temp; } System.out.print("加密后的数字为:"); for(int j=0;j<4;j++) System.out.print(a[j]); } } 【程序49】 题目:计算字符串中子串出现的次数 import java.util.*; public class lianxi49 { public static void main(String args[]){ Scanner s = new Scanner(System.in); System.out.print("请输入字符串:"); String str1 = s.nextLine(); System.out.print("请输入子串:"); String str2 = s.nextLine(); int count=0; if(str1.equals("")||str2.equals("")) { System.out.println("你没有输入字符串或子串,无法比较!"); System.exit(0); } else { for(int i=0;i<=str1.length()-str2.length();i++) { if(str2.equals(str1.substring(i, str2.length()+i))) //这种比法有问题,会把"aaa"看成有2个"aa"子串。 count++; } System.out.println("子串在字符串中出现: "+count+" 次"); } }} 【程序50】 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数存放在磁盘文件 "stud "中。 public class lianxi50 { public static void main(String[] args){ Scanner ss = new Scanner(System.in); String [][] a = new String[5][6]; for(int i=1; i<6; i++) { System.out.print("请输入第"+i+"个学生的学号:"); a[i-1][0] = ss.nextLine(); System.out.print("请输入第"+i+"个学生的姓名:"); a[i-1][1] = ss.nextLine(); for(int j=1; j<4; j++) { System.out.print("请输入该学生的第"+j+"个成绩:"); a[i-1][j+1] = ss.nextLine(); } System.out.println("\n"); } //以下计算平均分 float avg; int sum; for(int i=0; i<5; i++) { sum=0; for(int j=2; j<5; j++) { sum=sum+ Integer.parseInt(a[i][j]); } avg= (float)sum/3; a[i][5]=String.valueOf(avg); } //以下写磁盘文件 String s1; try { File f = new File("C:\\stud"); if(f.exists()){ System.out.println("文件存在"); }else{ System.out.println("文件不存在,正在创建文件"); f.createNewFile();//不存在则创建 } BufferedWriter output = new BufferedWriter(new FileWriter(f)); for(int i=0; i<5; i++) { for(int j=0; j<6; j++) { s1=a[i][j]+"\r\n"; output.write(s1); } } output.close(); System.out.println("数据已写入c盘文件stud中!"); } catch (Exception e) { e.printStackTrace(); } }} 第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大 public class A1 { public static void main(String [] args) { System.out.println(computeAge(8)); } public static int computeAge(int n) { if(n==1) return 10; return computeAge(n-1) + 2; } } public static void toBinary(int n,StringBuffer result) { if(n/2 != 0) toBinary(n/2,result); result.append(n%2); }

2015-09-05

云计算分布式大数据Hadoop实战之路--从零开始(第1-10讲)

云计算分布式大数据Hadoop实战之路--从零开始(第1-10讲)

2015-07-22

传智播客hadoop资料课堂ppt

传智播客hadoop资料课堂ppt,值得一看

2015-07-22

操作系统 文件系统课程设计

操作系统 课程设计 文件系统,C、C++

2014-03-25

用C语言写的俄罗斯方块

C语言写的俄罗斯方块,VC6.0上调试通过,不用图形库

2012-05-13

tc2.0使用教程

主菜单 在Turbo C 2.0主屏幕顶上一行, 显示下列内容: File Edit Run Compile Project Options Debug Break/watch 除Edit外, 其它各项均有子菜单, 只要用Alt加上某项中第一个字母

2011-11-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除