Demo 01
解答:
数据: a b c delt r1 r2
步骤:
- 提示用户输入abc三个参数
- 计算delt=b*b-4*a*c
- 判断delt的值 (delt>0,输出两个解;delt=0,输出一个解;delt<0,无实数解)
import java.util.Scanner;
class Demo03_01{
public static void main(String[] args){
//1.
Scanner scanner=new Scanner(System.in);
System.out.print("请输入a,b,c:");
double a=scanner.nextDouble();
double b=scanner.nextDouble();
double c=scanner.nextDouble();
//2.
double delt=b*b-4*a*c;
//3.
if(delt>0){
double r1=(-b+Math.sqrt(delt))/(2*a);
double r2=(-b-Math.sqrt(delt))/(2*a);
System.out.printf("r1=%.2f,r2=%.2f",r1,r2);
}else if(delt==0){
double r=(-b-Math.sqrt(delt))/(2*a);
System.out.printf("r=%.2f",r);
}else{
System.out.println("无实数解!");
}
}
}
Demo 02
解答:
数据: a b c d e f ad-bc x y
步骤:
- 提示用户输入 a b c d e f
- 计算ad-bc
- 判断ad-bc是否等于零
- ad-bc=0则报告信息"The eqestion has no solution" 否则带入算式中计算 x y 的值 输出结果
import java.util.Scanner;
class Demo02{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入a,b,c,d,e,f:");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
double d = scanner.nextDouble();
double e = scanner.nextDouble();
double f = scanner.nextDouble();
double z = a*d - b*c;
if(z==0){
System.out.println("The equation has no solution");
}else{
double x = (e*d - b*f)/(a*d - b*c);
double y = (a*f - e*c)/(a*d - b*c);
System.out.println("x is" + x + "and y is" + y);
}
Demo 03
解答:
数据:
- 今天是周几 未来的天数 未来的周几 (0+12)%7=5 (4+4)%7=1 (今天的周几+未来的天数)%7=未来的周
例如1月1日是周一 1%7=1
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20
1月20日 20%7=6
步骤:
- .输入今天是周几
- .输入未来的几天
- .打印未来的几天是周几
import java.util.Scanner;
class Demo03_03{
public static void main(String[] args){
//1.
Scanner scanner=new Scanner(System.in);
System.out.print("今天是周几:");
int today=scanner.nextInt();
//2.
System.out.print("未来的几天:");
int future=scanner.nextInt();
//3.
int futureDay=(today+future)%7;
String todayStr="";
String futureDayStr="";
if(today==0){
todayStr="周日";
}else if(today==1){
todayStr="周一";
}else if(today==2){
todayStr="周二";
}else if(today==3){
todayStr="周三";
}else if(today==4){
todayStr="周四";
}else if(today==5){
todayStr="周五";
}else if(today==6){
todayStr="周六";
}
if(futureDay==0){
futureDayStr="周日";
}else if(futureDay==1){
futureDayStr="周一";
}else if(futureDay==2){
futureDayStr="周二";
}else if(futureDay==3){
futureDayStr="周三";
}else if(futureDay==4){
futureDayStr="周四";
}else if(futureDay==5){
futureDayStr="周五";
}else if(futureDay==6){
futureDayStr="周六";
}
System.out.println("今天是"+todayStr+",未来的日子是"+futureDayStr);
}
}
Demo 04
解答:
数据: 程序随机产生两位数com 用户输入两位数usr
步骤:
- 提示用户输入两位数
- 与程序随机产生的两位数对比
- 不同条件输出不同结果
import java.util.Random;
import java.util.Scanner;
class Demo05{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入a,b:");
int a = scanner.nextInt();
int b = scanner.nextInt();
Random random=new Random();
int c = random.nextInt(10);
int d = random.nextInt(10);
if(a==c||b==d){
System.out.println("恭喜你,一等奖10000$");
}else if(a==d||b==c){
System.out.println("恭喜你,二等奖3000$");
}else if(c==a||c==b||d==a||d==b){
System.out.println("恭喜你,三等奖1000$");
}else{
System.out.println("很抱歉,你没有中奖!");
}
}
}
题中运用到随机生成数与三目运算符
Demo 05
解答:
数据:h(一个星期中的某一天) q(某月的第几天) m(月份) j(世纪数 |year/100|) k(该世纪的第几年 year%100)
步骤:
- 提示用户输入相关数据
- 带入到算式中进行运算
- 输出结果
import java.util.Scanner;
class Demo05{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.先输入年份
System.out.print("请输入年份:");
int year=scanner.nextInt();
//2.输入月份 1月 2月分别用13 14代替 同时year-1
System.out.print("请输入月份:");
int month=scanner.nextInt();
//3.输入日期
System.out.print("请输入日期:");
int day=scanner.nextInt();
//4.对特殊的1月和2月做处理
if(month==1||month==2){
month+=12;
year-=1;
}
//5.套公式
int h=(day+26*(month+1)/10+year%100+year%100/4+year/100/4+5*year/100)%7;
switch(h){
case 0:
System.out.println("是周六");
break;
case 1:
System.out.println("是周日");
break;
case 2:
System.out.println("是周一");
break;
case 3:
System.out.println("是周二");
break;
case 4:
System.out.println("是周三");
break;
case 5:
System.out.println("是周四");
break;
case 6:
System.out.println("是周五");
break;
}
}
}
题中特殊要求对 13 14 进行特殊处理应注意到以及switch语句的使用
Demo 06
解答:
数据:用户输入的坐标点(x1,y1)
步骤:
- 提示用户输入坐标点(x1,y1)
- 先大致判断一下坐标的范围
- 再精确判断坐标的范围
- 输出判断结果
几何图示:
红色边框为最开始的大致判断范围 蓝色区域是精确判断范围
import java.util.Scanner;
class Demo06{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.提示用户输入一个点的坐标
System.out.print("请输入一个坐标:");
double x=scanner.nextDouble();
double y=scanner.nextDouble();
//2.先大致判断一下坐标的范围
//3.再精确的判断坐标的范围
if(x>=0&&x<=200&&y<=-0.5*x+100){
System.out.println("点再三角形内");
}else{
System.out.println("点再三角形外");
}
}
}
Demo 07
解答:
数据:两个矩形中点坐标(x1,y1)(x2,y2)高 h1 h2 宽 w1 w2
步骤:
- 提示用户输入数据
- 寻找出判断条件进行判断
- 输出判断结果
几何图示
import java.util.Scanner;
class Demo07{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.先输入大矩形的中心,宽和高
System.out.print("请输入第1个矩形的信息:");
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double w1=scanner.nextDouble();
double h1=scanner.nextDouble();
//2.再输入小矩形的中心,宽和高
System.out.print("请输入第2个矩形的信息:");
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double w2=scanner.nextDouble();
double h2=scanner.nextDouble();
double inXMin=x1-(w1-w2)/2;
double inXMax=x1+(w1-w2)/2;
double inYMin=y1-(h1-h2)/2;
double inYMax=y1+(h1-h2)/2;
double outXMin=x1-(w1+w2)/2;
double outXMax=x1+(w1+w2)/2;
double outYMin=y1-(h1+h2)/2;
double outYMax=y1+(h1+h2)/2;
if(x2>=inXMin&&x2<=inXMax&&y2>=inYMin&&y2<=inYMax){
System.out.println("小矩形在大矩形里面!");
}else if(x2<=outXMin||x2>=outXMax||y2<=outYMin||y2>=outYMax){
System.out.println("小矩形在大矩形外面!");
}else{
System.out.println("小矩形和大矩形相交!");
}
}
}
此类几何图形题应找到极限值来确定判断条件 最好先进行画图梳理逻辑思路
Demo 08
解答:
数据:输入 i
步骤:
- 提示用户输入 i
- 数据带入算式进行运算(算式的正确表达)
- 输出结果
import java.util.Scanner;
class Demo08{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int imax=scanner.nextInt();
double sum=0;
double flag=1;
for(int i=1;i<=imax;i++){
//sum+=Math.pow(-1.0,i+1);/(2*i-1);
sum+=flag/(2*i-1);
flag=-flag;
}
double pi=sum*4;
System.out.println(pi);
// 累乘 Math.pow(-1.0,i+1) for -1*-1*-1....
}
}
Demo 09
解答:
数据: 用户输入 十进制整数(int) 输出的二进制
步骤:
- 提示用户输入十进制数据
- 运用短除法不断对二取余
- 倒序输出结果
import java.util.Scanner;
class Demo9{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int num=scanner.nextInt();
String binStr="";
while(true){
binStr=num%2+binStr;//"1100"
num/=2;
if(num==0){
break;
}
}
System.out.println(binStr);
}
}
此题中关于倒序输出字符算需用到binStr语句,应掌握此应用
Demo 10
解答:
数据: 用户输入的整数序列 max(存放最大值) count(计数)
步骤:
- 提示用户输入整数序列
- 依次存放入max 下一数字与max比较
- num<max 舍去 ;num > max 则替换num==max count重置1 ;num==max count++;
- 输出运算结果
import java.util.Scanner;
class Demo10{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int num=0;
int max=0;
int count=0;
System.out.print("请输入数字:");
while(true){
num=scanner.nextInt();
if(num==0){
break;
}else if(num>max){
max=num;
count=1;
}else if(num==max){
count++;
}
}
System.out.println("max="+max+",count="+count);
}
}