文档库 最新最全的文档下载
当前位置:文档库 › java100个经典例子

java100个经典例子

java100个经典例子
java100个经典例子

package test1;

/**

* Title: Hello Java World

* Description: 简单的Java程序,只显示一个信息。

* filename: HelloWorld.java

*/

public class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello Java World!");

}

}

package test2;

/**

* Title: Java语言流程演示

* Description: 演示Java中几种常用的流程控制操作

* Filename: flowDome.java

*/

public class flowDemo{

public static void main(String[] arges){

int iPara1,iPara2,iEnd;

if(arges.length!=3)

{

System.out.println("USE :java flowDome parameter1 parameter2 circle");

System.out.println("parameter1 : 比较条件1,数字类型");

System.out.println("parameter2 : 比较条件2,数字类型");

System.out.println("circle :循环次数");

System.out.println("ego:java flowDome 1 2 5");

return;

}else{

iPara1 = Integer.parseInt(arges[0]);

iPara2 = Integer.parseInt(arges[1]);

iEnd = Integer.parseInt(arges[2]);

}

//if语句

if(iPara2>iPara1)

{

System.out.println("if 条件满足!");

System.out.println("第2个数比第1个数大!");

}

else

{

System.out.println("if 条件不满足!");

System.out.println("第2个数比第1个数小!");

}

//for循环操作

for(int i=0;i

{

System.out.println("这是for 第"+i+"次循环");

}

//while循环操作

int i=0;

while(i

{

System.out.println("这是while 第"+i+"次循环");

i++;

}

//do-while循环操作

int j=0;

do

{

System.out.println("这是do-while 第"+j+"次循环");

j++;

}while(j

}

}

package test3;

/**

* Title: 数组数据操作

* Description: 演示一维数组和多维数组的初始化和基本操作

* Filename: myArray.java

*/

public class myArray{

//初始化数组变量

char[] cNum = {'1','2','3','4','5','6','7','8','9','0'};

char[] cStr = {'a','b','c','d','e','f','g','h',

'i','j','k','l','m','n','o','p',

'q','r','s','t','u','v','w','x','y','z'};

int[] iMonth = {31,28,31,30,31,30,31,31,30,31,30,31};

String[] sMail = {"@","."};

/**

*
方法说明:校验电子邮件

*
输入参数:String sPara 被校验的电子邮件字符

*
返回类型:boolean 如果校验的格式符合电子邮件格式返回true;否则返回false */

public boolean isMail(String sPara){

for(int i=0;i

if(sPara.indexOf(sMail[i])==-1)

return false;

}

return true;

}

/**

*
方法说明:判断是否是数字

*
输入参数:String sPara。需要判断的字符串

*
返回类型:boolean。如果都是数字类型,返回true;否则返回false */

public boolean isNumber(String sPara){

int iPLength = sPara.length();

for(int i=0;i

char cTemp = sPara.charAt(i);

boolean bTemp = false;

for(int j=0;j

if(cTemp==cNum[j]){

bTemp = true;

break;

}

}

if(!bTemp) return false;

}

return true;

}

/**

*
方法说明:判断是否都是英文字符

*
输入参数:String sPara。要检查的字符

*
返回类型:boolean。如果都是字符返回true;反之为false

*/

public boolean isString(String sPara){

int iPLength = sPara.length();

for(int i=0;i

char cTemp = sPara.charAt(i);

boolean bTemp = false;

for(int j=0;j

if(cTemp==cStr[j]){

bTemp = true;

break;

}

}

if(!bTemp) return false;

}

return true;

}

/**

*
方法说明:判断是否是闰年

*
输入参数:int iPara。要判断的年份

*
返回类型:boolean。如果是闰年返回true,否则返回false

*/

public boolean chickDay(int iPara){

return iPara%100==0&&iPara%4==0;

}

/**

*
方法说明:检查日期格式是否正确

*
输入参数:String sPara。要检查的日期字符

*
返回类型:int 0 日期格式正确,-1 月或这日不合要求,-2 年月日格式不正确 */

public int chickData(String sPara){

@SuppressWarnings("unused")

boolean bTemp = false;

//所输入日期长度不正确

if(sPara.length()!=10) return -2;

//获取年

String sYear = sPara.substring(0,4);

//判断年是否为数字

if(!isNumber(sYear)) return -2;

//获取月份

String sMonth = sPara.substring(5,7); 2011 05 05

//判断月份是否为数字

if(!isNumber(sMonth)) return -2;

//获取日

String sDay = sPara.substring(8,10);

//判断日是否为数字

if(!isNumber(sDay)) return -2;

//将年、月、日转换为数字

int iYear = Integer.parseInt(sYear);

int iMon = Integer.parseInt(sMonth);

int iDay = Integer.parseInt(sDay);

if(iMon>12) return -1;

//闰年二月处理

if(iMon==2&&chickDay(iYear)){

if(iDay>29) return 2;

}else{

if(iDay>iMonth[iMon-1]) return -1;

}

return 0;

/**

*
方法说明:主方法,测试用

*
输入参数:

*
返回类型:

*/

public static void main(String[] arges){

myArray mA = new myArray();

//校验邮件地址

boolean bMail = mA.isMail("tom@https://www.wendangku.net/doc/5517792208.html,");

System.out.println("1 bMail is "+bMail);

bMail = mA.isMail("tom@163com");

System.out.println("2 bMail is "+bMail);

//演示是否是数字

boolean bIsNum = mA.isNumber("1234");

System.out.println("1:bIsNum="+bIsNum);

bIsNum = mA.isNumber("123r4");

System.out.println("2:bIsNum="+bIsNum);

//演示是否是英文字符

boolean bIsStr = mA.isString("wer");

System.out.println("1:bIsStr="+bIsStr);

bIsStr = mA.isString("wer3");

System.out.println("2:bIsStr="+bIsStr);

//演示检查日期

int iIsTime = mA.chickData("2003-12-98");

System.out.println("1:iIsTime="+iIsTime);

iIsTime = mA.chickData("2003-111-08");

System.out.println("2:iIsTime="+iIsTime);

iIsTime = mA.chickData("2003-10-08");

System.out.println("3:iIsTime="+iIsTime);

iIsTime = mA.chickData("2000-02-30");

System.out.println("4:iIsTime="+iIsTime);

}

}

package test4;

import java.util.*;

/**

* Title: 矢量操作<

* Description: 演示一个矢量(V ector)的基本操作 * Filename: operateVector.java

*/

public class operateV ector

/*

*
方法说明:生成一个4*4的二维Vector,供使用。

*
输入参数:

*
输出变量:Vector

*
其它说明:

*/

public Vector buildVector(){

V ector vTemps = new Vector();

for(int i=0;i<4;i++){

Vector vTemp = new Vector();

for (int j=0;j<4;j++){

vTemp.addElement("Vector("+i+")("+j+")");

}

vTemps.addElement(vTemp);

}

return vTemps;

}

/*

*
方法说明:插入数据

*
输入参数:Vector vTemp 待插入的数据对象

*
输入参数:int iTemp 插入数据的位置

*
输入参数:Object oTemp 插入数据值

*
输出变量:Vector 结果

*
其它说明:如果插入位置超出实例实际的位置将返回null

*/

public Vector insert(Vector vTemp,int iTemp,Object oTemp){ if(iTemp>vTemp.size()){

print("数据超界!");

return null;

}else{

vTemp.insertElementAt(oTemp,iTemp);

}

return vTemp;

}

/*

*
方法说明:移除数据

*
输入参数:Vector vTemp 待删除矢量对象

*
输入参数:int iTemp 删除数据的位置

*
输出变量:Vector

*
其它说明:如果删除超界的数据,将返回null

*/

public Vector delete(Vector vTemp,int iTemp){

if(iTemp>vTemp.size()){

print("数据超界!");

return null;

}else{

vTemp.removeElementAt(iTemp);

}

return vTemp;

}

/*

*
方法说明:修改数据

*
输入参数:Vector vTemp 待修改矢量对象

*
输入参数:int iTemp 修改数据的位置

*
输入参数:Object oTemp 修改数据值

*
输出变量:Vector

*
其它说明:如果修改位置超界的数据,将返回null

*/

public Vector updata(Vector vTemp,int iTemp,Object oTemp){ if(iTemp>vTemp.size()){

print("数据超界!");

return null;

}else{

vTemp.setElementAt(oTemp,iTemp);

}

return vTemp;

}

/*

*
方法说明:输出信息

*
输入参数:String sTemp 输出信息名称

*
输入参数:Object oTemp 输出信息值

*
返回变量:无

*/

public void print(String sTemp,Vector oTemp){

System.out.println(sTemp+"数据:");

this.print(oTemp);

}

/**

*
方法说明:打印输出(过载)

*
输入参数:Object oPara 输出的对象

*
返回类型:无

*/

public void print(Object oPara){

System.out.println(oPara);

}

/**

*
方法说明:打印输出(过载)

*
输入参数:Vector vPara 显示输出矢量对象

*
返回类型:无

*/

public void print(Vector vPara){

for(int i=0;i

System.out.println(vPara.elementAt(i));

}

}

/**

*
方法说明:主方法,程序入口

*
输入参数:String[] args

*
返回类型:无

*/

public static void main(String[] args)

{

operateVector ov = new operateVector();

Vector vTemp = ov.buildVector();

ov.print("vTemp0",vTemp);

Vector vResult = ov.insert(vTemp,2,"添加的数据");

ov.print("vResult",vResult);

Vector vResultup = ov.updata(vResult,2,"修改的数据");

ov.print("vResultmp",vResultup);

Vector vResultnow = ov.delete(vResultup,2);

ov.print("vResultnow",vResultnow);

}

}

package test5;

import java.util.*;

/**

* Title: 哈希表操作

* Description: 这是一个权限认证的例子,使用了哈希表作为数据的存储

* Filename: RoleRight.java

*/

public class RoleRight

{

private static Hashtable rightList = new Hashtable(); /**

*
方法说明:初始化数据

*
输入参数:

*
返回类型:

*/

public void init()

{

String[] accRoleList = {"admin","satrap","manager","user","guest"};

String[] rightCodeList = {"10001","10011","10021","20011","24011"};

for(int i=0;i

{

rightList.put(accRoleList[i],rightCodeList[i]);

}

}

/**

*
方法说明:获取角色权限代码

*
输入参数:String accRole 角色名称

*
返回类型:String 权限代码

*/

public String getRight(String accRole)

{

if(rightList.containsKey(accRole))

return (String)rightList.get(accRole);

else

return null;

}

/**

*
方法说明:添加角色和代码信息

*
输入参数:String accRole 角色名称

*
输入参数:String rightCode 角色权限代码

*
返回类型:void (无)

*/

public void insert(String accRole,String rightCode)

{

rightList.put(accRole,rightCode);

}

/**

*
方法说明:删除角色权限

*
输入参数:String accRole 角色名称

*
返回类型:void(无)

*/

public void delete(String accRole)

{

if(rightList.containsKey(accRole))

rightList.remove(accRole);

}

/**

*
方法说明:修改角色权限代码

*
输入参数:String accRole 角色名称

*
输入参数:String rightCode 角色权限代码

*
返回类型:void(无)

*/

public void update(String accRole,String rightCode)

{

//this.delete(accRole);

this.insert(accRole,rightCode);

}

/**

*
方法说明:打印哈希表中角色和代码对应表

*
输入参数:无

*
返回类型:无

*/

public void print()

{

Enumeration RLKey = rightList.keys();

while(RLKey.hasMoreElements())

{

String accRole = RLKey.nextElement().toString();

print(accRole+"="+this.getRight(accRole));

}

}

/**

*
方法说明:打印信息(过载)

*
输入参数:Object oPara 打印的信息内容

*
返回类型:无

*/

public void print(Object oPara)

{

System.out.println(oPara);

}

/**

*
方法说明:主方法,

*
输入参数:

*
返回类型:

*/

public static void main(String[] args)

{

RoleRight RR = new RoleRight();

RR.init();

RR.print();

RR.print("___________________________");

RR.insert("presider","10110");

RR.print();

RR.print("___________________________");

RR.update("presider","10100");

RR.print();

RR.print("___________________________");

RR.delete("presider");

RR.print();

}

}//end:)~

package test6;

/**

* Title: 树参数

* Description: 使用继承类,柳树就是树

* Filename: osier.java

*/

class tree

{

/**

*
方法说明:树的树根

*/

public void root()

{

String sSite = "土壤中";

String sFunction = "吸收养份";

print("位置:"+sSite);

print("功能:"+sFunction);

}

/**

*方法说明:树的树干

*/

public void bolo()

{

String sSite = "地面";

String sFunction = "传递养份";

print("位置:"+sSite);

print("功能:"+sFunction);

}

/**

*方法说明:树的树枝

*/

public void branch()

{

String sSite = "树干上";

String sFunction = "传递养份";

print("位置:"+sSite);

print("功能:"+sFunction);

}

/**

*方法说明:树的叶子

*/

public void leaf()

{

String sSite = "树梢";

String sFunction = "光合作用";

String sColor = "绿色";

print("位置:"+sSite);

print("功能:"+sFunction);

print("颜色:"+sColor);

}

/**

*方法说明:显示信息

*输入参数:Object oPara 显示的信息 */

public void print(Object oPara)

{

System.out.println(oPara);

}

/**

*方法说明:主方法:

*/

public static void main(String[] arges) {

tree t = new tree();

t.print("描述一棵树:");

t.print("树根:");

t.root();

t.print("树干:");

t.bolo();

t.print("树枝:");

t.branch();

t.print("树叶:");

t.leaf();

}

}

/**

* Title: 柳树参数

* Description: 描述柳树的参数

*/

class osier extends tree

{

/**

*方法说明:过载树的树叶

*/

public void leaf()

{

super.leaf();

String sShape = "长形";

super.print("形状:"+sShape);

}

/**

*方法说明:扩展树的花

*/

public void flower()

{

print("哈哈,柳树没有花!!");

}

/**

*方法说明:主方法

*/

public static void main(String[] args)

{

osier o = new osier();

o.print("柳树树根:");

o.root();

o.print("柳树树干:");

o.bolo();

o.print("柳树树枝:");

o.branch();

o.print("柳树树叶:");

o.leaf();

o.print("柳树花:");

o.flower();

}

}

package test7;

/**

* Title: 接口和抽象函数

* Description: 演示继承抽象函数和实现接口 * Filename: newPlay.java

*/

//接口

interface player

{

int flag = 1;

void play();//播放

void pause();//暂停

void stop();//停止

}//end :)

//抽象类

abstract class playing

{

public void display(Object oPara)

{

System.out.println(oPara);

}

abstract void winRun();

}//end :)

//继承了playing抽象类和实现类player接口

public class newPlay extends playing implements player

{

public void play()

{

display("newPlay.play()");//这里只是演示,去掉了代码。

}

public void pause()

{

display("newPlay.pause()");//这里只是演示,去掉了代码。}

public void stop()

{

display("newPlay.stop()");//这里只是演示,去掉了代码。

}

void winRun()

{

display("newPlay.winRun()");//这里只是演示,去掉了代码。}

public static void main(String[] args)

{

newPlay p = new newPlay();

p.play();

p.pause();

p.stop();

p.winRun();

}

}//end :)

package https://www.wendangku.net/doc/5517792208.html,;

/**

* Title: 标识符

* Description: 演示标识符对类的访问控制

* Filename:

*/

public class classDemo1 {

// 公有方法

public void mechod1() {

System.out.println("这是一个公有的方法!任何类都可以访问。");

}

// 授保护的方法

protected void mechod2() {

System.out.println("这是一个受到保护的方法!只有子类可以访问。");

}

// 私有的方法

private void mechod3() {

System.out.println("这是一个私有的方法!只有类本身才可以访问。");

}

public static void main(String[] args) {

classDemo1 d = new classDemo1();

d.mechod1();

d.mechod2();

d.mechod3();

}

}

package https://www.wendangku.net/doc/5517792208.html,;

/**

* Title: 标识符

* Description: 演示标识符对类的访问控制

* Filename:

*/

public class classPlay

{

public static void main(String[] args){

classDemo1 d = new classDemo1();

d.mechod1();

d.mechod2();

//d.mechod3();

}

}

package https://www.wendangku.net/doc/5517792208.html,;

import https://www.wendangku.net/doc/5517792208.html,.classDemo1;

/**

* Title: 标识符

* Description: 演示标识符对类的访问控制

* Filename:

*/

public class classPlay

{

public static void main(String[] args){

classDemo1 d = new classDemo1();

d.mechod1();

//d.mechod2();

//d.mechod3();

}

}

package test9;

/**

* Title: 捕获异常和实现自己的异常

* Description: 通过继承Exception类来实现自己的异常类。并使用try-catch来捕获这个异常。

* Filename:

*/

class MyException extends Exception {

private static final long serialVersionUID = 1L;

public MyException() {

}

public MyException(String msg) {

super(msg);

}

public MyException(String msg, int x) {

super(msg);

i = x;

}

public int val() {

return i;

}

private int i;

}

public class DemoException {

/**

*方法说明:使用MyException类中默认的构造器

*/

public static void a() throws MyException {

System.out.println("Throwing MyException from a()");

throw new MyException();

}

/**

*方法说明:使用MyException类中带信息的构造器

*/

public static void b() throws MyException {

System.out.println("Throwing MyException from b()");

throw new MyException("Originated in b()");

}

/**

*方法说明:使用了MyException中有编码的构造器

*/

public static void c() throws MyException {

System.out.println("Throwing MyException from c()");

throw new MyException("Originated in c()", 47);

}

public static void main(String[] args) {

try {

a();

} catch (MyException e) {

e.getMessage();

}

try {

b();

} catch (MyException e) {

e.toString();

}

try {

c();

} catch (MyException e) {

e.printStackTrace();

System.out.println("error code: " + e.val());

}

}

} // end :)

package test10;

import javax.swing.*;

import java.awt.*;

/**

* Title: 创建自己的窗体

* Description:

* Filename:mainFrame.java

*/

public class mainFrame extends JFrame {

private static final long serialVersionUID = 1L;

/**

*方法说明:构造器,通过传递参数来完成窗体的绘制。

*输入参数:String sTitle 窗体标题

*输入参数:int iWidth 窗体的宽度

*输入参数:int iHeight 窗体的高度返回类型:

*/

public mainFrame(String sTitle, int iWidth, int iHeight) {

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();// 获取屏幕尺寸

ImageIcon ii = new ImageIcon("middle.gif");

setTitle(sTitle);// 设置窗体标题

setIconImage(ii.getImage());// 设置窗体的图标

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);// 设置但关闭窗体时退出程序

setSize(iWidth, iHeight);// 设置窗体大小

int w = getSize().width;// 获取窗体宽度

int h = getSize().height;// 获取窗体高度

System.out.println("窗体宽:" + w + " 窗体高:" + h);

int x = (dim.width - w) / 2;

int y = (dim.height - h) / 2;

setLocation(x, y);// 将窗体移到屏幕中间

setVisible(true);// 显示窗体

}

public static void main(String[] args) {

JFrame.setDefaultLookAndFeelDecorated(true);// 使用最新的SWING外观new mainFrame("main Frame Demo", 400, 300);

}

}

JAVA经典算法案例

JA V A经典算法40例 【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... public class exp2{ public static void main(String args[]){ int i=0; for(i=1;i<=20;i++) System.out.println(f(i)); } public static int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } } 或 public class exp2{ public static void main(String args[]){ int i=0; math mymath = new math(); for(i=1;i<=20;i++) System.out.println(mymath.f(i)); } } class math { public int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } } 【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class exp2{ public static void main(String args[]){ int i=0; math mymath = new math(); for(i=2;i<=200;i++) if(mymath.iszhishu(i)==true) System.out.println(i); } } class math { public boolean iszhishu(int x) { for(int i=2;i<=x/2;i++) if (x % i==0 ) return false; return true; } } 【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水

java源代码经典入门案例—光环java编程培训机构

java源代码经典入门案例 class Demo { public static void main(String[] args) { System.out.println("hello E盘"); } } class Demo { public static void main(String[] args) { System.out.println("hello E盘"); } } /* 需求:练习一个hello world程序。 思路: 1,定义一个类,因为java程序都定义类中,java程序都是以类的形式存在的,类的形式其实就是一个字节码文件最终体现。 2,定义一个主函数。为了让该类可以独立运行。 3,因为演示hello world,在控制台上看到该字样,所以需要使用输出语句完成。 步骤: 1,用class关键字来完成类的定义,并起一个阅读性强的类名。 2,主函数:public static void main(String[] args)这时固定格式的。jvm认识。 3,使用输出语句:System.out.println("hello world"); 代码仅仅是思想的一种体现形式。 */ class Demo

{ //定义一个主函数,为了保证程序的独立运行。 public static void main(String[] args) { System.out.println("hello world");//这是输出语句,用于将括号中的数据打印到控制台上,ln可以在数据的结尾处换行。 } } class OperateDemo { public static void main(String[] args) { //算术运算符。+ - * / %(取余,模运算) +(连接符) // ++(自增:就在原有数据基础上+1,在赋给原有数据) -- //int x = 6370; //x = x / 1000 * 1000; //System.out.println(x); // System.out.println(5%2); // System.out.println(3+"2"); //System.out.println("5+5="+(5+5));//"5+5=5"+5 "5+5=55" //int a = 4,b = 5; //System.out.println("a="+a+",b="+b);//a=4,b=5; int a = 3,b; //a++;//a = a+1; // b = a++; b = (a++)+(++a)+(a++)+a; // 3 5 5 6 System.out.println("a="+a+",b="+b); int i = 3; i = i++;

C51单片机C语言程序100例_Keil

目录 目录 (1) 函数的使用和熟悉********************************/ (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (16) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0口8位LED流水点亮 (20) 实例29:用P0、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (23) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 1/192

Java经典编程题50道

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 【程序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的值,重复执行第一步。 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下 的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析:利用while语句,条件为输入的字符不为'\n'. 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加), 几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 【程序9】

贪心算法经典例题

贪心算法经典例题 发布日期:2009-1-8 浏览次数:1180 本资料需要注册并登录后才能下载! ·用户名密码验证码找回密码·您还未注册?请注册 您的账户余额为元,余额已不足,请充值。 您的账户余额为元。此购买将从您的账户中扣除费用0.0元。 内容介绍>> 贪心算法经典例题 在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。 从贪心算法的定义可以看出,贪心法并不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。 我们看看下面的例子 例1 均分纸牌(NOIP2002tg) [问题描述] 有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。例如 N=4,4 堆纸牌数分别为: ①9 ②8 ③17 ④ 6 移动3次可达到目的: 从③取 4 张牌放到④(9 8 13 10) -> 从③取 3 张牌放到②(9 11 10 10)-> 从②取 1 张牌放到①(10 10 10 10)。 [输入]:键盘输入文件名。 文件格式:N(N 堆纸牌,1 <= N <= 100) A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000) [输出]:输出至屏幕。格式为:所有堆均达到相等时的最少移动次数。 [输入输出样例] a.in: 4 9 8 17 6 屏慕显示:3 算法分析:设a[i]为第i堆纸牌的张数(0<=i<=n),v为均分后每堆纸牌的张数,s为最小移到次数。 我们用贪心法,按照从左到右的顺序移动纸牌。如第i堆(0

经典C语言程序100例子

经典C语言程序100例子

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 2.程序源代码: main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控制输出,每行四个*/ f1=f1+f2; /*前两个月加起来赋值给第三个月*/ f2=f1+f2; /*前两个月加起来赋值给第三个月*/ } } ==================================================== ========== 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 2.程序源代码: #include "math.h" main() { int m,i,k,h=0,leap=1; printf("\n"); for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) {printf("%-4d",m);h++; if(h%10==0) printf("\n"); } leap=1; } printf("\nThe total is %d",h); } ====================================================

JAVA算法100例_全源码

JA V A经典算法40题 【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... public class exp2{ public static void main(String args[]){ int i=0; for(i=1;i<=20;i++) System.out.println(f(i)); } public static int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } } 或 public class exp2{ public static void main(String args[]){ int i=0; math mymath = new math(); for(i=1;i<=20;i++) System.out.println(mymath.f(i)); } } class math { public int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } } 【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class exp2{ public static void main(String args[]){ int i=0; math mymath = new math(); for(i=2;i<=200;i++) if(mymath.iszhishu(i)==true) System.out.println(i); } } class math { public int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } public boolean iszhishu(int x) { for(int i=2;i<=x/2;i++) if (x % 2==0 ) return false; return true;

OpenLayers二维地图使用教程

OpenLayers 1 OpenLayers简介 OpenLayers是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript包。它实现访问地理空间数据的方法都符合行业标准,比如OpenGIS的WMS和WFS规范,OpenLayers 采用纯面向对象的JavaScript方式开发,同时借用了Prototype框架和Rico库的一些组件。采用OpenLayers作为客户端不存在浏览器依赖性。由于OpenLayers采用JavaScript语言实 现,而应用于Web浏览器中的DOM(文档对 象模型)由JavaScript实现,同时,Web浏览 器(比如IE,FF等)都支持DOM。OpenLayers APIs采用动态类型脚本语言JavaScript编写, 实现了类似与Ajax功能的无刷新更新页面, 能够带给用户丰富的桌面体验(它本身就有一 个Ajax类,用于实现Ajax功能)。 目前,OpenLayers所能够支持的Format有:XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-Known Text)。在OPenlayers.Format名称空间下的各个类里,实现了具体读/写这些Format的解析器。OpenLayers所能够利用的地图数据资源“丰富多彩”,在这方面提供给拥护较多的选择,比如WMS、WFS、GoogleMap、KaMap、MSVirtualEarth、WorldWind等等。当然,也可以用简单的图片作为源。 在操作方面,OpenLayers 除了可以在浏览器中帮助开发者实现地图浏览的基本效果,比如放大(Zoom In)、缩小(Zoom Out)、平移(Pan)等常用操作之外,还可以进行选取面、选取线、要素选择、图层叠加等不同的操作,甚至可以对已有的OpenLayers 操作和数据支持类型进行扩充,为其赋予更多的功能。例如,它可以为OpenLayers 添加网络处理服务WPS 的操作接口,从而利用已有的空间分析处理服务来对加载的地理空间数据进行计算。同时,在OpenLayers提供的类库当中,它还使用了类库Prototype.js 和Rico 中的部分组件,为地图浏览操作客户端增加Ajax效果。 2 Openlayers基本使用方法 Openlayers是使用Javascript编写的脚本,与网页设计技术密切相关,因此在使用之前需要掌握一定得相关知识,例如html、css、javascript等。编辑工具推荐使用:EditPlus。 1)下载并拷贝源代码即相关文件 到Openlayers官方网站https://www.wendangku.net/doc/5517792208.html,下载源代码压缩包,解压后可以看到其中的一些目录和文件。需要拷贝的文件和目录有:根目录下的【OpenLayer.js】文件、根目录下的【lib】目录、根目录下的【img】目录、根目录下的【theme】目录。将这4项内容拷贝到你网站的Scripts目录下(当然,这个只是例子,自己的网站程序目录结构自己说了算,只要保证OpenLayers.js,/lib,/img,/theme在同一目录中即可)。

C语言经典算法100例题目

看懂一个程序,分三步:1、流程;2、每个语句的功能;3、试数; 小程序:1、尝试编程去解决他;2、看答案;3、修改程序,不同的输出结果; 4、照答案去敲; 5、调试错误; 6、不看答案,自己把答案敲出来; 7、实在不会就背会。。。。。周而复始,反复的敲。。。。。 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(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%提成,从键盘输入当月利润I,求应发放奖金总数? ============================================================== 【程序3】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?============================================================== 【程序4】 题目:输入某年某月某日,判断这一天是这一年的第几天? ============================================================== 【程序5】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 ============================================================== 【程序6】 题目:用*号输出字母C的图案。 ============================================================== 【程序7】 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! ============================================================== 【程序8】 题目:输出9*9口诀。 ============================================================== 【程序9】 题目:要求输出国际象棋棋盘。 ============================================================== 【程序10】 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 -------------------------------------------------------------------------------- 【程序11】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? ==============================================================

经典c程序100例

经典c程序100例 ==1--10 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } }

=========================================== =================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(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%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75;

openlayers经典例子

Openlayers经典例子 案例地址 (2) 一. Popup (2) 二、图层叠加 (3) 三、编辑功能 (5) 四、鹰眼 (7) 五、书签及样式 (7) 六、改变显示内容 (9) 七、SLD (9) 八、动画效果 (10) 九、获得属性 (11) 十、局部放大 (12) 十一、记录上次操作历史 (12) 十二、鼠标滚轮 (13) 十三、鼠标坐标 (13) 十四、标签 (14) 十五、全屏 (14) 十六、显示缩放比例 (15)

案例地址 https://www.wendangku.net/doc/5517792208.html,/releases/OpenLayers-2.10/examples/ https://www.wendangku.net/doc/5517792208.html,/dev/examples/ 一.Popup https://www.wendangku.net/doc/5517792208.html,/dev/examples/sundials.html https://www.wendangku.net/doc/5517792208.html,/dev/examples/sundials-spherical-mercator.html

https://www.wendangku.net/doc/5517792208.html,/dev/examples/select-feature-openpopup.html 二、图层叠加 https://www.wendangku.net/doc/5517792208.html,/dev/examples/layerswitcher.html

https://www.wendangku.net/doc/5517792208.html,/dev/examples/wmts-getfeatureinfo.html https://www.wendangku.net/doc/5517792208.html,/dev/examples/wmts-capabilities.html

C语言经典算法100例(1---30)

2008-02-18 18:48 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(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%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000)

Openlayers教程

OpenLayers教程 1开始使用openlayers 1.1设置 先到它的官方网站https://www.wendangku.net/doc/5517792208.html,下载他的压缩包,解压。 拷贝目录下的OpenLayer.js、根目录下的lib目录、根目录下的img目录到你网站的Scripts目录下(当然,这个只是例子,您网站的目录结构您自己说得算,只要保证OpenLayers.js,/lib,/img在同一目录中即可)。然后,创建一个****.html作为查看地图的页面。 2试验openlayers 环境:geoserver1.7 Openlayers2.4 Dreamviever8 2.1第一个地图窗口 目标:用openlayers加载geoserver wms。 步骤: (1)空白html文件 (2)插入div-map (3)为div付风格 以上为未加载地图的静态页面 代码为: 效果为: (4)插入openlayers代码引用 (5)写js代码,主要是init() 第一个地图窗口就完成了 注1.js中defer的作用是页面加载完成后,执行脚本。

注2.222 2.2控制地图与div的占据区域 目标:让地图默认占满展现区 方法: 设置map的options,由其中两个因素决定:maxExtent-最大地图边界;maxResolution-最大解析度。 当maxExtent设置为地图的最大边界后,maxResolution设置为auto,那地图就占满DIV。 var options = { controls: [], maxExtent: bounds, maxResolution: "auto", projection: "EPSG:4326", numZoomLevels: 7, units: 'degrees' }; map = new OpenLayers.Map('map',options); 2.3地图控制-尺度缩放 目标:填加尺度缩放控件 步骤: (1)map初始化赋参数 var options = { controls: [], //scales: [50000000, 30000000, 10000000, 5000000], maxExtent: bounds, maxResolution: "auto", projection: "EPSG:4326", numZoomLevels: 7, (表示有几个缩放级别) units: 'degrees' }; map = new OpenLayers.Map('map',options); (2)填加控件,代码 map.addControl(new OpenLayers.Control.PanZoomBar({ position: new OpenLayers.Pixel(2, 15)(右边距,上边距) })); 思考:级别的计算,个人推测由(maxResolution- minResolution)/ numZoomLevels,但是默认值是书面日后再细究。

java经典案例与项目

Java学习的经典的案例收集 1:九九乘法表 /* 功能:实现九九乘法表的输出 时间:2013年7月4日 */ public class jiujiuchengfabiaoDemo { public static void main(String[] args) { for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+(i*j)+"\t"); } System.out.println(); } } } 结果: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 2:输出等腰三角形 public class SanJiaoDemo { public static void main(String[] args) { for(int a=1;a<=5;a++){ for(int b=1;b<=5-a;b++){ System.out.print(" "); }

geoserver

●利用具有地理空间位置信息的数据制作地图。其中将地图定义为地理数据可视的表现。 这个规范定义了三个操作: ?GetCapabitities 返回服务级元数据,它是对服务信息内容和要求参数的一种描述; ?GetMap 返回一个地图影像,其地理空间参考和大小参数是明确定义了的; ?GetFeatureInfo(可选)返回显示在地图上的某些特殊要素的信息 WFS: Web Feature Service(Web要素服务) ●Web 地图服务返回的是图层级的地图影像, ●Web要素服务(WFS)返回的是要素级的GML编码,并提供对要素的增加、修改、删 除等事务操作,是对Web地图服务的进一步深入。OGC Web要素服务允许客户端从多个Web要素服务中取得使用地理标记语言(GML)编码的地理空间数据,定义了五个操作: ?GetCapabilites 返回Web要素服务性能描述文档(用XML描述); ?DescribeFeatureType 返回描述可以提供服务的任何要素结构的XML文档; ?GetFeature 一个获取要素实例的请求提供服务; ?Transaction 为事务请求提供服务; ?LockFeature 处理在一个事务期间对一个或多个要素类型实例上锁的请求。 WFS-T: Web Map Service-Transactional. 允许用户以可传输的块编辑地理数据。 WCS:Web Coverage Service(Web覆盖服务) Web 覆盖服务(WCS)面向空间影像数据,它将包含地理位置值的地理空间数据作为“覆盖(Coverage)”在网上相互交换。 ●网络覆盖服务由三种操作组成:GetCapabilities,GetCoverage和DescribeCoverageType: ?GetCapabilities 操作返回描述服务和数据集的XML文档。 ?GetCoverage操作是在GetCapabilities确定什么样的查询可以执行、什么样的数据能 够获取之后执行的,它使用通用的覆盖格式返回地理位置的值或属性。 ?DescribeCoverageType 操作允许客户端请求由具体的WCS服务器提供的任一覆盖层 的完全描述。 GML: Geography Markup Language. 一种用于描述地理数据的XML。OGC——Open Geospatial Consortium——开放地理信息联盟 总之,GeoServer 是您需要显示地图在网页的那些工具的当中一个,用户可以缩放并且移动。可以与一些客户端联合使用,比如:MapBuilder (for web pages), UDig, GVSig,等等。对标准的使用允许信息从GeoServer 到其它地理信息可以很容易地被结合。

Java九大示例程序

JAVA面向对象九个经典例子程序 1 Hello world例子 (1) 2 类的基本组成示例 (1) 3静态与非静态变量及方法的使用 (3) 4 类继承的例子 (3) 5类的访问修饰符 (4) 6抽象类及其实现示例 (5) 7接口及其实现 (6) 8 抽象类与接口混合编程例子 (7) 9 接口回调与多态性 (8) 1 Hello world例子 package Example; //定义自己的包名 public class Example1 //定义一个类 { public static void main(String[] args) //系统可以执行的main方法,这里是一个公有静态无返回值的方法 { System.out.println("Hello world!"); //调用https://www.wendangku.net/doc/5517792208.html,ng包中的System类的PrintLine方法输出Hello world! } } 2 类的基本组成示例 package Example; class Person { public int age; //声明公共字段age private String name; //声明私有字段name,此时name为类的属性,下面通过公有方法进行访问 public String getName() { return name;

} public void setName(String name) { https://www.wendangku.net/doc/5517792208.html, = name; } public void eat() //定义无参数的eat方法 { System.out.println("Person can eat"); } public void eat(String s) //定义带参数的eat方法,实现方法重载 { System.out.println("Person can eat"+s); } public Person() //定义无参构造函数,注意无返回值定义,方法与类同名 { } public Person(int age, String name) //重写一个带参数构造函数,注意无返回值定义,方法与类同名 { this.age = age; //前一个age为对象的字段,由this指定,后一个age为函数形参 https://www.wendangku.net/doc/5517792208.html, = name; //前一个name为对象的属性,由this指定,因为在本类中可直接访问,后一个name为函数形参 } } public class Example2 { public static void main(String[] args) { Person person1 = new Person(); //调用类的无参构造函数 person1.age = 20; //给对象的公有字段直接赋值 person1.setName("zhangsan"); //必须使用公共方法才能给对象的属性赋值 System.out.println("第一个人信息,姓名:"+person1.getName()+"年 龄:"+person1.age); person1.eat(); //调用对象的无参方法 Person person2 = new Person(18, "lisi");//调用类的有参构造函数 System.out.println("第二个人信息,姓名:"+ person2.getName() + "年龄:"+ person2.age); person2.eat(" 馒头"); //调用对象的有参方法 } }

C语言经典算法大全

C语言经典算法大全 老掉牙 河内塔 费式数列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 骑士走棋盘 八个皇后 八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) 数、运算 蒙地卡罗法求PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) Craps赌博游戏 约瑟夫问题(Josephus Problem) 集合问题 排列组合 格雷码(Gray Code) 产生可能的集合

m元素集合的n个元素子集 数字拆解 排序 得分排行 选择、插入、气泡排序 Shell 排序法- 改良的插入排序Shaker 排序法- 改良的气泡排序Heap 排序法- 改良的选择排序快速排序法(一) 快速排序法(二) 快速排序法(三) 合并排序法 基数排序法 搜寻 循序搜寻法(使用卫兵) 二分搜寻法(搜寻原则的代表)插补搜寻法 费氏搜寻法 矩阵 稀疏矩阵 多维矩阵转一维矩阵 上三角、下三角、对称矩阵 奇数魔方阵 4N 魔方阵 2(2N+1) 魔方阵

1.河内之塔 说明河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越 战时北越的首都,即现在的胡志明市;1883年法国数学家Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。 解法如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘 子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递回处理。事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1,所以当盘数为64时,则所需次数为:264- 1 = 18446744073709551615为5.05390248594782e+16年,也就是约5000世纪,如果对这数字没什幺概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左右。 #include void hanoi(int n, char A, char B, char C) { if(n == 1) { printf("Move sheet %d from %c to %c\n", n, A, C); } else { hanoi(n-1, A, C, B); printf("Move sheet %d from %c to %c\n", n, A, C); hanoi(n-1, B, A, C); } } int main() { int n; printf("请输入盘数:"); scanf("%d", &n); hanoi(n, 'A', 'B', 'C'); return 0; }