第二章补充习题

1、冒泡法排序

//冒泡算法实现升序排序
import java.io.*;
public class maopao{
public static void main(String[] args) {
int a[]={23,4,32,15,67,43,12,98,56,2};//存储数据
int temp;//中间变量,用于下面交换两个数组元素时使用
//输出排序前的状态
System.out.println("before sort......");
for(int i=0;i<a.length;i++){
System.out.println("a["+i+"]="+a[i]);
}
/*
*开始排序,基本思路是对比某个元素和其后面
*的元素值,如果前面的值大于后面的,交换两
*者位置,这样可以把最大值放在最后,然后再
*根据上面的方法操作一次,可以将第二大的数
*放在倒数第二的位置上,多次操作后,实现从
*小到大排序。同样的方法也可以实现从大到小
*排序
**/
for(int x=0;x<a.length-1;x++){
for(int y=0;y<a.length-1-x;y++){
if(a[y]>a[y+1]){
temp=a[y];
a[y]=a[y+1];
a[y+1]=temp;
}
}
}
/*
for(int x=a.length-1;x>0;x--){
for(int y=x;y>0;y--){
if(a[y]>a[y+1]){
temp=a[y];
a[y]=a[y+1];
a[y+1]=temp;
}
}
}
*/
//输出排序后的数据
System.out.println("after sort......");
for(int i=0;i<a.length;i++){
System.out.println("a["+i+"]="+a[i]);
}
}
}

2、选择法排序

//选择法排序,升序
import java.io.*;
public class xuanze {
public static void main(String[] args) {
int a[]={23,4,32,15,67,43,12,98,56,2};//存储数据
int temp;//中间变量,用于下面交换两个数组元素时使用
//输出排序前的状态
System.out.println("before sort......");
for(int i=0;i<a.length;i++){
System.out.println("a["+i+"]="+a[i]);
}
int x,y,z;//z表示最小值的下标,xy控制循环
int min;//min存储一个假设的最小值
for (x=0;x<a.length;x++ ) {
min=a[x];
z=x;
/*每次循环min都设为a[x],z为x,
 避免上次循环的结果影响到本次循环
*/
for(y=x+1;y<a.length;y++){
if(min>a[y]){
min=a[y];
z=y;
}
}
if(z!=x){
temp=a[x];
a[x]=a[z];
a[z]=temp;
}


}
//输出排序后的数据
System.out.println("after sort......");
for(int i=0;i<a.length;i++){
System.out.println("a["+i+"]="+a[i]);
}
}
}


3、整数拆分

/*有5个四位数,已经存入数组,找出它们中千位+百位=十位+个位
的数的个数及其平均值,还有不满足此条件的四位数的平均值。
*/
import java.io.*;
public class chaifen{
public static void main(String[] args) {
int a[]={2345,2451,4536,3764,9834};
int cnt=0,sum1=0,sum2=0;
double avg1,avg2;
/*cnt表示符合条件的整数的个数,sum1表示符合条件的
整数的和,avg1为此类数的平均值,sum2表示不符合条件
的整数的和,avg2为此类数的平均值*/
int qian,bai,shi,ge;//千位,百位,十位,个位的值
for (int i=0; i<a.length; i++) {
qian=a[i]/1000;
bai=(a[i]/100)%10;
shi=(a[i]/10)%10;
ge=a[i]%10;
if (qian+bai==shi+ge) {
cnt++;
sum1=sum1+a[i];
}else {
sum2=sum2+a[i];
}
}
avg1=(double)sum1/cnt;
avg2=(double)sum2/(a.length-cnt);
System.out.println("符合条件的数有"+cnt+"个,平均值为"+avg1);
System.out.println("不符合条件的数有"+(a.length-cnt)+"个,平均值为"+avg2);
}
}

4、求质数

//求三位的质数
import java.io.*;
import java.util.*;
public class sushu{
public static void main(String[] args) {
int cnt=0;
long sum=0L;
int flag;
for(int i=101;i<1000;i=i+2){
flag=0;
for (int j=2;j<=Math.sqrt(i);j++ ) {
sum++;
if (i%j==0) {
flag=1;
break;
}
}
if (flag==0) {
cnt++;
System.out.println(i);
}
}
System.out.println("一共有"+cnt+"个质数");
System.out.println("一共测试"+sum+"次");
}
}

5、百钱买百鸡

/*
某人有100块钱,集市上公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱三只;
他该如何买才能实现100元买100只鸡;
*/
import java.io.*;
public class baiqian {
public static void main(String[] args) {
int x,y,z;//x是公鸡数目,y是母鸡数目,z是小鸡数目
for (x=0;x<=20 ;x++ ) {
for (y=0; y<=33; y++) {
for (z=0;z<=300 ;z=z+3 ) {
if((x*5+y*3+(z/3)==100)&(x+y+z==100)){
System.out.print("x="+x);
System.out.print(",y="+y);
System.out.print(",z="+z);
System.out.println();
}
}
}
}
}
}


6、猴子吃桃问题

/*
一只猴子摘了若干桃子,第一天吃了一半多一个,
此后每天吃了一半多一个,到第10天只剩一个桃子,
第一天摘了多少桃子?
*/
import java.io.*;
public class monkey {
public static void main(String[] args) {
int num_peach=1;
for (int i=0;i<9;i++ ) {
num_peach=(num_peach+1)*2;
}
System.out.println("num_peach="+num_peach);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值