Day37---学习Java第三弹
2021-08-18
Java经典编程例题
40、字符串排序。
package wangjt;
import java.util.Scanner;
public class test40 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] toStrings = new String[5];
String temp = null;
toStrings[0] = "afdfdcv";
toStrings[1] = "ghaf";
toStrings[2] = "fdasfas";
toStrings[3] = "tyrdfas";
toStrings[4] = "fadsfsd";
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (toStrings[i].compareTo(toStrings[j]) > 0) {
temp = toStrings[i];
toStrings[i] = toStrings[j];
toStrings[j] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
System.out.println(toStrings[i]);
}
}
}
第四十题:字符串排序。
分析:和我们常做的int类型排序差不多,只是把int换成了String而已,只需用一个字符串比较的方法,再用冒泡法等方法排序 。
41、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
package test2;
public class test41 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int temp = 0, j, i = 4, count;
while (true) {
j = i;//先保存i的值
count = 0;//表示判定成功的次数
for (int k = 0; k < 5; k++) {
temp = i / 4 * 5 + 1;
i = temp;
if (temp % 4 == 0) {//如果该数是四的倍数
count++;
} else {
break;
}
}
i = j;
if (count == 4) {
System.out.println(temp);
break;
}
i += 4;//因为变量i表示最后剩的桃子,而该数一定是四的倍数,所以该变量自加四
}
}
}
分析: 需要用循环,判定的条件为初始在执行运算后的数值可以被四整除,且该操作需连续四次判定为正确
需要注意的点:在得到结果后需跳出while循环
42、809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
在这里插入代码片package test2;
public class test42 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 10;
while (i < 100) {
if (8 * i > 10 && 8 * i < 100 && 9 * i >= 100 && 9 * i < 1000) {
System.out.println(i + " " + 809 * i);
break;
}
i++;
}
}
}
分析:原来题目的这个等式无解,去掉加一就有解了,但是这个等式也没有什么意义了,因为它对于任何数字都成立,所以只用管这题的第二个条件即可
需要注意的点:如果用while循环记得在得到结果后跳出循环。
43、题目:求0—7所能组成的奇数个数。
//组成1位数是4个。
//组成2位数是74个。
//组成3位数是784个。
//组成4位数是7884个。
//…
package test2;
public class test43 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int m = 0, i = 1;
while (i < 76543210) {
if (i % 2 != 0) {
m++;
}
i++;
}
System.out.println(m);
}
}
分析:虽然题目没有明说数字可不可以重复,但从下面组成数字的个数我们可以看出数字是可以重复的,直接用循环搞定
需要注意的点:注意条件是奇数
44、一个偶数总能表示为两个素数之和。
package test2;
import java.util.Scanner;
public class test44 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int j = 2; j < n; j++) {
if (mi(j) && mi(n - j)) {
System.out.println(j + " " + (n - j));
break;
}
}
}
static boolean mi(int i) {
for (int j = 2; j < i / 2; i++) {
if (i % j == 0) {
return false;
}
}
return true;
}
}
分析:先写出求素数的方法
需要注意的点:由于用除sqrt(n)的方法求出的素数不包括2和3,因此在判断是否是素数程序中人为添加了一个3。
--------------------------------------------------------------------------------------------------
明天继续