目录
4、连续输入多个数,如果为0,退出;如果是负数,忽略;并分别计算奇偶数的个数
5、水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
7、有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完
一.顺序结构
计算机默认的执行结构
二.选择结构
2.1 if
1.单分支
if(){
}
2.双分支
if(){
}else{
}
3.多分支
语法: if(条件表达式){
代码块1 }else if(条件表达式){
代码块2 }else{ 代码块3 }
4.嵌套
:if或else里嵌套if .. else
2.2 switch
注意:
1.switch 语句如果没有遇到 break ,会一直执行下去
2.switch 只能做等值比较;而且只能使用 byte,short,int,char 类型(1.7后可以使用 String )
3.switch 中使用的是穿透执行的原则;即满足一个 case 后,如没有 break ;则会穿透执行下面的代码;而忽略 case 及 default 的判断;
4.与if相比,switch 的 结构更加清晰,但只能做等值比较,而且数据类型有限制,因此没有 if 应用广泛;
三.循环结构
3.1 while循环
[初始化语句]
while(条件表达式)
{ 代码块 }
3.2 do .. while
[初始化语句]
do { 代码块 }
while(条件表达式);
至少执行一次循环体
3.3 for
for(初始语句;循环体条件表达式;循环体后语句){ 代码块 }
初始语句:只运行一次,开始循环判断之前执行,通常用来初使化变量;
循环体条件表达式:布尔表达式,用来判断是否进入循环体;
循环体后语句:循环体结束后执行的代码;
以上三个表达式都可以省略,如省略,则为死循环
特点:非常适合已知次数的循环;
break: 结束循环
continue: 跳过当前循环
嵌套循环
四.使用循环解决的算法
4.1 暴力(枚举)法
就是穷举法
将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。
例如:找出1到100之间的素数,需要将1到100之间的所有整数进行判断。
特点
1、得到的结果肯定是正确的;
2、可能做了很多的无用功,浪费了宝贵的时间,效率低下。
3、通常会涉及到求极值(如最大,最小等)。
4、数据量大的话,可能会造成时间崩溃。
4.2 顺推
从已知条件出发,逐步推算出要解决问题的方法
例如: 1.卖西瓜 有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完
2.斐波拉契数列
4.3 逆推
从已知结果,用迭代表达式逐步推算出问题的开始条件
例如: 1.猴子吃桃 猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
五.练习
1、完成1+2+3+.....+100
package base;
public class Test02 {
public static void main(String[] args) {
//完成1+2+3+.....+100
int sum = 0;
for (int i = 1; i <= 100 ; i++){
sum += i;
}
System.out.println("结果为: "+ sum);
}
}
2、做一个猜11以内的整数的游戏,直到猜对为止
package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//做一个猜10以内的整数的游戏,直到猜对为止
Scanner scanner = new Scanner(System.in);
int r = (int) (Math.random() * 10 + 1 );
System.out.println(r);
while(true){
System.out.println("请输入数字: ");
int finger = scanner.nextInt();
if (finger == r){
System.out.println("恭喜你猜对了");
break;
}else{
System.out.println("猜错了呀,继续猜!");
}
}
}
}
3、判断一个数是否为素数
package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//判断一个数是否为素数
Scanner scanner = new Scanner(System.in);
int finger = scanner.nextInt();
boolean flag = true;
for (int i = 2; i < Math.sqrt(finger); i++) {
if (finger % i == 0){
flag = false;
System.out.println(finger+"不是素数");
break;
}
}
System.out.println(finger+"是素数");
}
}
4、连续输入多个数,如果为0,退出;如果是负数,忽略;并分别计算奇偶数的个数
package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//连续输入多个数,如果为0,退出;如果是负数,忽略;并分别计算奇偶数的个数
Scanner scanner = new Scanner(System.in);
int jishu=0,oushu=0;
while(true){
int finger = scanner.nextInt();
if (finger == 0){
break;
}else{
if (finger < 0){
System.out.println("请输入正数");
}else if (finger % 2 == 0){
oushu++;
}else{
jishu++;
}
}
}
System.out.println("奇数个数: "+jishu);
System.out.println("偶数个数: "+oushu);
}
}
5、水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个三位整数: ");
int finger = scanner.nextInt();
int a = finger % 10; //个位数
int b = finger / 10 % 10; //十位数
int c = finger / 100; //百位数
if (Math.pow(a,3) + Math.pow(b,3) + Math.pow(c,3) == finger){
System.out.println(finger+"是水仙花数");
}else{
System.out.println(finger+"不是水仙花数");
}
}
}
6、鸡兔一共有50只,脚一共有160只,问鸡和兔各多少只?
package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//鸡兔一共有50只,脚一共有160只,问鸡和兔各多少只?
for (int i = 1;i <= 50;i++){
int j = 50 - i;
if (i * 2 + j * 4 == 160){
System.out.println("鸡兔个数分别为: "+ i+","+ j);
break;
}
}
}
}
7、有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完
package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完
int day=0;
int sellSum,restSum = 1020;
while(restSum > 0){
sellSum = restSum / 2 + 2;
restSum = restSum - sellSum;
day++;
}
System.out.println(day+"天卖完");
}
}
8、神兔:有一对兔子,三个月成长期后,每一个月会下一对小兔子,小兔子的成长期也是三个月,每个月都会下一对小兔子,经此类推。问12个月后,一共有多少对兔子?
9、猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
10、百钱买百鸡,有100元钱,要去买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只,问公,母,小鸡各买多少只
package base;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//10、百钱买百鸡,有100元钱,要去买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只
// 问公,母,小鸡各买多少只
//公鸡最多20只,母鸡最多33只
for (int i = 0; i < 20;i++){
for (int j = 0;j<33;j++){
for(int k = 0;k<100;k++){
if ((i + j + k==100)&& (5*i + 3*j + k/3==100)&&(k%3==0)){
System.out.print(" 分别为 "+i+" "+j+" "+k+" ");
}
}
}
}
}
}
这个可以改进,小鸡个数可以用100-i-j 代替
以上代码都是我自己写的,没答案,如有错误,麻烦指正