JAVA第三章习题代码之总结
JAVA第三章习题代码之总结
3.7
分析:
1.数据:某一天 h,月份m,年year.
2.步骤:1.提示用户输入年月和该月的哪一天。
2.带入公式计算h。
3.输出它是一周中的星期几。
import java.util.Scanner;
class Demo3_7{
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为1或者2,则给month的值加12,给year的值减1.
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){ //用switch-case来实现数字具体指的是星期几。
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;
}
}
}
注意:对一月和二月的特殊处理。
3.9
分析:
1.数据:两点的坐标
2.步骤:1.提示用户输入一个点的x坐标和y坐标
2.先大致判断一下坐标的范围
3.再精确的判断坐标的范围
import java.util.Scanner;
class Demo03_09{
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){ //x范围[0,200]
System.out.println("点再三角形内"); //若y<=-0.5*x+100,点就在三角形内。
}else{
System.out.println("点再三角形外");
}
}
}
注意:主要求出斜边的表达式。
3.10
分析:
1.数据:坐标(x2,y2),坐标(x1,y1),h1,w1,h2,w2.
2.步骤:1.提示用户输入两个矩形中点的坐标以及每个的高和宽.
2.如图:求出小矩形在大矩形里面时小x2,y2的范围,以及在外面,相交时的范围。
import java.util.Scanner;
class Demo03_10{
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("小矩形和大矩形相交!");
}
}
}
注意:用极限的思想做。
3.11
分析:
步骤:1.请输入我指定个数的整数。
2.判断正数和负数分别为多少个。
3.求和,求平均值。
4.输出。
import java.util.Scanner;
class Demo03_11{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
double sum=0; //总和
int positives=0; //正数的个数
int negatives=0; //负数的个数
System.out.print("请输入若干数字:");
while(true){ //先都让数据进来。
int num=scanner.nextInt();
if(num!=0){
sum+=num;
if(num>0){ //整数个数的实现
positives++;
}else{
negatives++;
}
}else{
break; //跳出当前循环,不然的话会死循环
}
}
if(positives+negatives==0){
System.out.println("没有其他数字的输入,除了0");
}else{
System.out.println("正数的个数"+positives);
System.out.println("负数的个数"+negatives);
System.out.println("总和"+sum);
System.out.println("平均值"+sum/(positives+negatives));
}
}
}
注意:未指定的个数,就要考虑while循环。指定的个数用for 循环。
3.12
import java.util.Scanner;
class Demo03_12{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.输入两个数字
System.out.print("请输入两个数字:");
int n1=scanner.nextInt();
int n2=scanner.nextInt();
int gcd=1;
for(int i=n1<n2?n1:n2;i>=1;i--){//用三目运算符从最小数判断
if(n1%i==0&&n2%i==0){
gcd=i;
break;
}
}
System.out.println(gcd);
}
}
注意:break是结束for 循环的。
3.13
分析:
步骤:1.输入一个整数。
2.求最小因子。
3.按升序输出。(例:
120 2~120 ->2
60 2~60 ->2
30 2~30 ->2
15 2~15 ->3
5 2~5 ->5
1
)
import java.util.Scanner;
class Demo03_13{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int num=scanner.nextInt();
while(true){
for(int i=2;i<=num;i++){ //15%2取余不等于0,然后i++为3,再运行15%3
if(num%i==0){ //==0,然后输出3
System.out.print(i+" ");
num=num/i;
break;
}
}
if(num==1){
break;
}
}
}
}
注意:第一个break结束for循环。
3.14
分析:
拿出第四行找出规律:
4 3 2 1 2 3 4 //值 y
-3 -1 -2 0 1 2 3 //坐标 x
第4行 x∈[-3,3] y=|x|+1
第5行 x∈[-4,4] y=|x|+1
import java.util.Scanner;
class Demo03_14{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入行数:");
int line=scanner.nextInt();
for(int i=1;i<=line;i++){
for(int k=1;k<=(line-i);k++){//输出空格
if(line<10){
System.out.print(" ");//当行数小于10行时输出两个空格
}else{
System.out.print(" ");//当行数大于10行时输出三个空格
}
}
for(int x=-(i-1);x<=i-1;x++){//打印数字
if(line<10){
System.out.printf("%-2d",Math.abs(x)+1);
}else{
System.out.printf("%-3d",Math.abs(x)+1);
}
}
System.out.println();
}
}
}
3.15
class Demo03_15{
public static void main(String[] args){
//图案一
for(int i=1;i<=6;i++){
for(int j=1;j<=i;j++){
System.out.print(j+" ");
}
System.out.println();
}
//图案二
for(int i=1;i<=6;i++){
for(int j=1;j<=7-i;j++){
System.out.print(j+" ");
}
System.out.println();
}
//图案三
for(int i=1;i<=6;i++){
for(int k=1;k<=6-i;k++){
System.out.print(" "); //先输出空格
}
for(int j=i;j>=1;j--){
System.out.print(j+" ");//再输出数字
}
System.out.println();
}
//图案四
for(int i=1;i<=6;i++){
for(int k=1;k<=i-1;k++){
System.out.print(" ");
}
for(int j=1;j<=7-i;j++){
System.out.print(j+" ");
}
System.out.println();
}
}
}
注意:先抛开图形的形状,找出数字之间的规律,再写代码实现。
3.16
分析:
第4行
1 2 4 8 4 2 1
0 1 2 3 2 1 0
x -3 -2 -1 0 1 2 3
第5行
1 2 4 8 16 8 4 2 1
0 1 2 3 4 3 2 1 0
x -4-3-2-1 0 1 2 3 4
根据:x属于[-(i-1),i-1] ,y=i-1-|x|, 2^y ,来打印数字。
class Demo03_16{
public static void main(String[] args){
for(int i=1;i<=8;i++){
for(int k=1;k<=8-i;k++){ //打印空格
System.out.print(" ");
}
for(int x=-(i-1);x<=i-1;x++){ //打印数字
System.out.printf("%4d",(int)Math.pow(2,i-1-Math.abs(x)));
}
System.out.println();
}
}
}
注意:对于打印一些对称性的三角形图案或者是类似的问题,用绝对值方便。
上一篇: TSN源码分析
下一篇: Windows下TSN实验记录