ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:23.66KB ,
资源ID:28188519      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28188519.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java趣味编程100实例doc.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java趣味编程100实例doc.docx

1、java趣味编程100实例doc1_1问题描述:根据福利彩票的规则,6个蓝色球,范围1-32,不允许重复,1个红色球,范围1-16,自动生存6个蓝色球,1个红色球。import java.util.Arrays; import java.util.Random; import java.util.Scanner;public class Ch11_2 /* * 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组 * param begin 最小数字(包含该数) * param end 最大数字(不包含该数) * param size 指定产生随机数的个数 * * 实现思路:

2、首先定义一个方法,使它能够产生6个不重复的蓝色随机数,存放到数组中, * 再产生1个红色随机数,最后他们组合在一起就是题目所求 */ public static int generateRandomNumber(int begin, int end, int size) / 加入逻辑判断,确保begin= end | (end - begin) size) return null; / 种子你可以随意生成,但不能重复 里面存放的是你的取值范围 /本题就是 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,

3、 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 int seed = new intend - begin; for (int i = begin; i end; i +) seedi - begin = i; int ranArr = new intsize; Random ran = new Random(); / 数量你可以自己定义。 这里生成了6个蓝色球的号码 for (int i = 0; i =lenB) templen=lenA-lenB; addB=maxlen(addB,templen);/调整长度,使其跟大数长度一致 else

4、 templen=lenB-lenA; addA=maxlen(addA,templen); char addcharA=addA.toCharArray(); char addcharB=addB.toCharArray(); int len=addcharA.length; int valueC=new intlen; for(int i=0;i=0;i-) if(valueCi=10) strvalue=String.valueOf(valueCi+tmp-10)+strvalue; tmp=valueCi/10; else strvalue=String.valueOf(valueCi

5、+tmp)+strvalue; tmp=0; return strvalue; /调整长度,使其长度一样 private static String maxlen(String str,int templen) String strmax=null; StringBuffer buff=new StringBuffer(); for(int i=0;itemplen;i+) buff.append(0); strmax=buff.toString()+str; return strmax; 1_3 尾数前移问题描述:求一个自然数N,个位数是6,将6提到最前面得到的数是N的4倍 public c

6、lass Ch11_5 /* * 问题分析:1 假设这个数是n6(n是从1开始的正整数) * 2 满足关系 6n=4*(n6) * 3 n6=n * 10 + 6; 6n=6 * Math.pow(10,i) + n; i代表的是6处在的是十位还是百位等等 (十位 i=1.) * param args */ public static void main(String args) int n = 0;/代表6的前面部分,“n6” int N;/6移动前,即N=n6 int M;/6移动到数字首部后,即M=6n int buf; int i = 0;/代表数字的长度 while(true)/穷举

7、 /移动前 N = n * 10 + 6; buf = n; /计算数字的长度,确定6移到首部的权重,即:6代表的是十位还是百位等等 while(buf!=0) i+; buf = buf/10; /移动后 M = (int)(6 * Math.pow(10,i) + n; /条件满足,输出,退出循环 if(M = (4*N) System.out.print(要找的数为:+N); break; n+;/穷举变量修改 i = 0;/长度值复位 1_4国际象棋有八行八列,64个单元格,在棋盘上摆放八个皇后,使其不能相互攻击,就是说任意两个皇后不能处在同一行,同一列或同一斜线上,问一共有多少中摆法

8、import java.util.Arrays;public class Ch11_6 static int result=0; static int WeiZhi=new int8; /全局数组,下标代表行,里面的元素代表列(就是我们上算法分析的解向量) static void EightQueen(int n) / 算法 int i,j; int ct; /用于判断是否冲突,1代表不冲突 if (n = 8) /若8个皇后已放置完成 System.out.println(Arrays.toString(WeiZhi); result+; return; for (i = 1; i = 8;

9、 i+) /试探 WeiZhin = i; /在该列的第i行上放置 /断第n个皇后是否与前面皇后形成攻击 ct=1; for (j = 0; j n; j+) if (WeiZhij = WeiZhin) / 形成攻击 ct=0; else if (Math.abs(WeiZhij - WeiZhin) = (n - j)/ 形成攻击 ct=0; else if (ct=1) /没有冲突,就开始下一列的试探 EightQueen(n + 1); /递归调用 public static void main(String args) EightQueen(0); /求解 System.out.pr

10、intln(一共有+result+种解法); 1_5 评委计分问题问题描述:有10个评委为参赛选手打分,分数是1到100。选手最后的得分是:去掉一个最高分,去掉一个最低分,其余8个评委取平均值。import java.util.Scanner;public class Ch11_7 public static void main(String args) Scanner in=new Scanner(System.in); int num,i,max,min,sum,avg; max=0; /*先假设当前的最大值max为0*/ min=100; /*先假设当前的最小值min为100*/ sum

11、=0; /*将求累加和变量的初值置为0*/ for(i=1;imax)max=num; /*通过比较筛选出其中的最高分*/ if(nummin)min=num; /*通过比较筛选出其中的最低分*/ System.out.printf(去掉一个最高分:%d n去掉一个最低分:%d ,max,min); avg=(sum-max-min)/8; System.out.printf(n平均得分:%d ,avg); /*输出结果*/ 1_6 罗马数字将阿拉伯数字(0到1000)转换为罗马数字,对应关系如下表123456789102030405060708090XXXXXXXLL LXLXXLXXXXC

12、100200300400500600700800900CCCCCCCDDDCDCCDCCCCM import java.util.Scanner;public class Ch11_8 /建立对照表 static String a=,I,II,III,IV,V,VI,VII,VIII,IX, ,X,XX,XXX,XL,L,LX,LXX,LXXX,XC, ,C,CC,CCC,CD,D,DC,DCC,DCCC,CM; public static void main(String args) Scanner in=new Scanner(System.in); System.out.print(请输

13、入一个阿拉伯数字:); int n=in.nextInt(); int t=0; System.out.printf(%d=,n); int i=1000; int fz;/分子 int fm;/分母 int row; int col; for(int m=0;m3;m+) fz=n%i;/只取1000以下的数 fm=i/10; t=fz/fm;/从高位向低位依次取出各位数字 row=2-m; col=t; System.out.printf(%s,arowcol+t);/对照表翻译输出 i=i/10; System.out.printf(n); 1_7 找假币问题问题描述:现在有n枚硬币,其

14、中一枚是假币,外观无法辩出。只知道假币比真币稍轻。要求仅仅使用一个天平,如何用最少的步骤找到假币?该问题和二分法类似,可以用分治法解决。import java.util.Scanner;public class Ch11_9 static final int MAXNUM=30; static int FalseCoin(int coin,int low,int high) /算法 int i,sum1,sum2; int re=0; sum1=sum2=0; if(low+1=high)/仅剩下两个硬币 if(coinlowcoinhigh) /左边轻 re=low+1;/下标从0开始,加1

15、 return re; else re=high+1; return re; if(high-low+1)%2 = 0) /n是偶数 for(i=low;i=low+(high-low)/2;i+) sum1= sum1 + coini; /前半段和 for(i=low+(high-low)/2+1;isum2) /前半段重,假币在后半段 re=FalseCoin(coin,low+(high-low)/2+1,high);/递归,在后半段中查询 return re; else if(sum1sum2)/后半段重,假币在前半段 re=FalseCoin(coin,low,low+(high-l

16、ow)/2);/递归,在前半段中查询 return re; else else /n是奇数 for(i=low;i=low+(high-low)/2-1;i+) sum1= sum1 + coini; /前半段和 for(i=low+(high-low)/2+1;isum2) /前半段重,假币在后半段 re=FalseCoin(coin,low+(high-low)/2+1,high);/递归,在后半段中查询 return re; else if(sum1sum2)/后半段重,假币在前半段 re=FalseCoin(coin,low,low+(high-low)/2-1);/递归,在前半段中查

17、询 return re; else /前后一样重,假币在中间 re=low+(high-low)/2+1;/计算中间位置 return re; return re; public static void main(String args) int coin=new intMAXNUM; int i,n; int weizhi; System.out.println(分治算法求解假银币问题!); System.out.print(请输入银币总的个数:); Scanner input=new Scanner(System.in); n=input.nextInt(); /银币总的个数 System

18、.out.print(请输入银币的真假:1代表假币,2代表真币); for(i=0;in;i+) coini=input.nextInt(); /输入银币的真假,1代表假币,2代表真币 weizhi=FalseCoin(coin,0,n-1); /调用求假币方法,求解 System.out.println(在上述+n+个银币中,第+weizhi+个银币是假的!); 1_8 窃贼问题(0-1背包问题)问题描述:有一个窃贼带着一个背包去偷东西,房间里有5件物品,其重量和价值如下:物品一:6 公斤 48 元物品二:5 公斤 40 元物品三:2 公斤 12 元物品四:1 公斤 8 元物品五:1 公斤

19、7 元窃贼希望拿到更大价值的东西,但是他的背包容量是8公斤,那么窃贼应该装上哪些东西才能达到要求?分析:这是一类典型的0-1背包问题下面我将提供两种解法:回溯法和动态规划法动态规划法解决0-1背包问题动态规划法的核心就是递归方程。如果你不能推出递归方程,那你就老老实实用回溯法吧 m(i, j)是背包容量为j,可选物品为0,1,.,i时0-1背包问题的最优值。m(i, j) = 0 j=0m(i, j) = 0 i=0 & j = wim(i, j) = m(i-1, j) j = wipublic class Ch11_10 /背包容量 private int c; /物品重量数组 priva

20、te int w; /物品价值数组 private int v; private int m;/m(i, j)是背包容量为j,可选物品为0,1,.,i时0-1背包问题的最优值。 /记录结果 private int x; /最大价值 private int maxV; /构造方法,数据初始化 public Ch11_10(int w, int v, int c) this.w = w; this.v = v; this.c = c; m = new intw.lengthc+1; x = new intw.length; /* 0-1背包问题 动态规划求解 *递归式 * m(i, j) = 0 j=0 * m(i, j)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1