趣味编程100例(部分)(3)

2019-03-11 15:23

(3)打擂求最大值、最小值 假设评委打分都是整数,我们可以先用两个变量max、min分别存放最低分0分,最高分100,通过一个循环语句,实现打擂,代码如下:

for(i=0;i<10;i++) {

if(x>max) max=x[i]; if(x

(4)累加求和

通过一个循环语句,实现累加求和,代码如下:

for(i=0;i<10;i++) {

sum=sum+x[i] }

(5)完整程序

现在我们就需要把刚才的程序进行组合,构成我们的完整程序:

import java.util.Scanner; public class ch2_4 {

public static void main(String[] args) {

int i,max,min,sum; int x[]=new int[10];

max=0; //注意,这里存放最小值0 min=100; //注意,这里存放最大值100 sum=0;

for(i=0;i<10;i++) //循环10次,给10个人打分 {

System.out.print(\请输入第\分数:\ Scanner input=new Scanner(System.in);

x[i]=input.nextInt(); //键盘接收分数,存入数组

sum=sum+x[i]; //累加求和

//通过打擂方式求最大值、最小值 if(x[i]>max)max=x[i]; if(x[i]

System.out.println(\去掉一个最高分和一个最低分:\、\ System.out.println(\平均分:\ } }

2.5 肇 事 车 辆 1.问题描述

有一个卡车司机肇事后想逃跑,但是被三个人看见了其车牌号,但是都没看全,甲说:车牌的前两位是一样的;乙说:车牌的后两位是一样的,但与前两位不一样;丙说:车牌是一个数字的平方,请编写一个程序计算该车牌号是多少(车牌号4位数)。 2.问题分析

这是一个典型的穷举法的问题。根据问题描述,我们可以从1100开始判断是不是一个数字的平方,如果是,就是我们要的车牌号,如果不是,再换下一个数1122试试,依此类推,把可能的情况都试一次。 (1)确定程序框架

通过前面的问题分析,我们可以假设车牌号最前一位为i,最后一位为j,通过循环判断i、j组成的数是不是一个平方数。程序的框架如下:

public class ch2_5 {

public static void main(String[] args) {

...

//i代表最高位上的数字

for (int i = 1; i <= 9; i++) {

//j代表最低位上的数字

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

//i、j组成的四位数是不是一个平方数

}

} } }

(2)平方数判断

程序的关键在于,i、j组成的数是不是平方数,由问题描述可知,车牌号前两位和后两位都是一样的数字,所以,很容易通过i、j写出这个车牌号:iijj,代码如下:

//i、j组成的四位数

t=i*1000+i*100+j*10+j;

车牌表示出来后,我们可以通过循环判断这个数是不是1的平方、2的平方、??、n的平方。如果是,就找到了。为了缩小比较范围,4位数如果是一个数的平方,那么这个数应该介于1000的平方根与10000的平方根之间。我们可以通过一次循环实现判断,代码如下:

//k的取值根据四位数字开平方得到的大概范围 for (int k = 30; k < 100; k++) {

if (k == Math.sqrt(t)) {

//车牌号找到了

} }

(3)完整程序

现在我们就需要把刚才的程序进行组合,构成我们的完整程序:

public class ch2_5 {

public static void main(String[] args) {

int t;

//i代表最高位上的数字

for (int i = 1; i <= 9; i++) {

//j代表最低位上的数字

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

if(i!=j) //题目要求,两位不相等 {

//i、j组成的四位数

t=i*1000+i*100+j*10+j;

//k的取值根据四位数字开平方得到的大概范围

for (int k = 30; k < 100; k++) {

if (k == Math.sqrt(t)) //判断是否是平方数

{

System.out.println(\车牌号码:\

}

} } }

} } }

(4)运行结果

运行程序,结果如图2.5所示。

2.6 分 糖 果 1.问题描述

10个小孩围成一圈分糖果,老师分给第1个小孩10块,第2个小孩2块,第3个小孩8块,第4个小孩22块,第5个小孩16块,第6个小孩4块,第7个小孩10块,第8个小孩6块,第9个小孩14块,第10个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖?

2.问题分析

分糖的过程是一个重复的过程。根据分糖的游戏规则,我们不停地重复分糖的步骤,我们可以用一个数组存放每个小孩手中的糖,通过循环修改数组中的数,最终达到都相等为止。 (1)确定程序框架

通过前面的问题分析,我们可以定义一个数组存放10个小孩的糖,如果数组里的值不相等就通过循环修改数组的值,修改完后接着判断是不是有奇数,如果有就加1,然后再判断是否相等,不相等再分,循环反复,直至相等为止。程序的框架如下:

public static void main(String args[]) {

int tang[]={10,2,8,22,16,4,10,6,14,20}; int times=0; //记录分糖果次数

//如果小孩手中的糖果不相等,就继续分糖果 while(isSame(tang)==false) {

//分糖果

times++; //次数加1 //糖果为奇数的向老师要糖果

}

System.out.println(\分糖果次数:\

System.out.println(\每个人最终的糖果个数:\

} }

(2)分糖果

由问题描述可知,所有的小孩同时将手中的糖分一半给右边的小孩,为了防止最后一个小孩的糖果个数被覆盖了,我们可以先把最后一个小孩(即第10个小孩)的糖果个数先临时保存下来,然后把第9个小孩的糖果一半加上第10个小孩的糖果一半给第10个小孩,依次,把第8个小孩的糖果一半加上第9个小孩的糖果一半给第9个小孩,??,把第1个小孩的糖果一半加上第2个小孩的糖果一半给第2个小孩,最后把临时保存下来的第10个小孩的糖果个数一半加上第1个小孩的糖果一半给第1个小孩,这样分糖果分了一遍。代码如下:

int m=tang[9]; //防止被覆盖,备份 for(int i=9;i>0;i--) //循环分糖果

{

tang[i]=tang[i]/2+tang[i-1]/2; }

tang[0]=tang[0]/2+m/2; //最后一个小孩分糖果

(3)糖果为奇数的向老师要糖果

由问题描述可知,糖块数为奇数的人可向老师要一块。这个问题比较简单,我们可以通过循环判断数组中的数字是不是奇数,进而是否加1操作。代码如下:

//糖果为奇数的向老师要糖果

for(int i=0;i<10;i++)

if(tang[i]%2!=0) tang[i]+=1;

(4)判断每个小孩手中的糖果个数是否相等

由问题描述可知,是否继续分糖的条件是,每个小孩手中的糖果是否一样多。我们可以采用循环比较数组相邻两个数字是否相等,相等则计数器(初始值为0)的个数加1,如果个数全相等,那么计数器的值应该为数组的长度减1。代码如下:

public static boolean isSame(int[] a) {

int n=0;

boolean b=false; //是否相等,标志

for(int i=0;i

if(a[i]==a[i+1]) //如果相邻两个数相等,计数器加1 {

n++; }

if(n==a.length-1) //全部相等判断


趣味编程100例(部分)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:南昌二中参观学习心得体会

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: