大皮

去见、去学、去写。

南昌航空大学 软件学院 pta Java 第一次作业 蔡珂 opp

好像是实验要写博客,但还是一起写了吧hhhh

第一次还是很简单的

蔡老师说后面很难

拭目以待吧hhhh

这期因为太简单,我没写注释(大家别学不好

而且是时隔两年再次用java,所以语法没有很精炼,看个过程就行

题目列表

7-1 身体质量指数(BMI)测算

体重是反映和衡量一个人健康状况的重要标志之一,过胖和过瘦都不利于健康,BMI(身体质量指数)计算方法:体重(以千克为单位)除以身高(以米为单位)的平方。中国成人正常的BMI应在18.5-24之间,如果小于18.5为体重不足,如果大于等于24为超重,大于等于28为肥胖。请编写程序,测算身体状态。

输入格式:

两个数值:体重(以千克为单位),身高(以米为单位),数值间以空格分隔。例如:65.5 1.75。
注意:体重的世界纪录是727公斤,身高的世界纪录是2.72米。输入数据上限不得超过纪录,下限不得小于等于0;

输出格式:

输入数值超出范围 :输出“input out of range”。例如:-2 3或者125 5。
BMI小于18.5 :输出“thin”。
BMI大于等于18.5小于24 :输出“fit”。
BMI大于等于24小于28 :输出“overweight”。
BMII大于等于28 :输出“fat”。

代码写紧凑点看着拥挤清楚

import java.util.Scanner; 
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        double n = input.nextDouble(),m = input.nextDouble();//读入
        if(n<=0||n>727||m<=0||m>2.72)
            System.out.printf("input out of range\n");
        else
        {
            double q = n/(m*m);
            if(q<18.5)
                System.out.printf("thin");
            else if(q<24)
                System.out.printf("fit");
            else if (q<28)
                System.out.printf("overweight");
            else
                System.out.printf("fat");
        }
    }
}

很简单的题目,ififfifif算出他是哪个区间就好,要判断一下是不是非法输入。

7-2 长度质量计量单位换算

长度、质量的计量有多重不同的计算体系,有标准的国际单位制:千克与米,也有各个国家自己的计量方法如:磅、英寸;1磅等于0.45359237千克,1英寸等于0.0254米,请编写程序实现国际单位  制与英制之间的换算。

输入格式:

两个浮点数,以空格分隔,第一个是质量(以千克为单位)、第二个是长度(以米为单位)。例如:0.45359237 0.0254。

输出格式:

两个浮点数,以空格分隔,第一个是质量(以磅为单位)、第二个是长度(以英寸为单位)。例如:1.0 1.0。
import java.util.Scanner; 
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        double n = input.nextDouble(),m = input.nextDouble();
        n/=0.45359237;
        m/=0.0254;
        System.out.printf((float)n+" "+(float)m);//转换成float
    }

}

记住要转换float格式,题目没有告诉你,故意挖坑

7-3 奇数求和

计算一个数列中所有奇数的和。

输入格式:

十个整数,以空格分隔。例如:1 2 3 4 5 6 7 8 9 0。

输出格式:

输入数列中所有奇数之和。例如:25。
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a=0;
        int[] b=new int[11];
        for(int i=0;i<10;i++)
        {
            b[i]=input.nextInt();
            if((b[i]&1)==1)
                a+=b[i];
        }
        System.out.printf("%d",a);
    }
}

判断奇偶然后奇数加起来就行。

7-4 房产税费计算2022

房屋交易在日常生活中非常常见的事情,房屋交易时要额外支付各种税费,按2022年房产交易新政策的规定买房人应缴纳税费包括:

1、契税:首次购房评估额90平(含)内1%、90平-144平(含)内1.5%,超过144平或非首 次3%,买方缴纳。

2、印花税:房款的0.05%。

3、交易费:3元/平方米。

4、测绘费:1.36元/平方米。

5、权属登记费及取证费:一般情况是在200元内。

输入格式:

四个数据,以空格分隔:
1、第几次购房(整数)
2、房款(整数/单位万元)
3、评估价(整数/单位万元)
4、房屋面积(浮点数/单位平方米)。
例如:1 100 100 90。

输出格式:

契税、印花税、交易费、测绘费(以元为单位),以空格分隔。例如:10000.0 500.0 270.0 122.4
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        float a=0;
        int[] b=new int[11];
        for(int i=0;i<4;i++)
        {
            b[i]=input.nextInt();
            if((b[i]&1)==1)
                a+=b[i];
        }
        if(b[0]>1||b[3]>144)
            a= (float) (b[2]*0.03*10000);
        else if(b[3]>90)
            a = (float)(b[2]*0.015*10000);
        else
            a = (float)(b[2]*0.01*10000);
        float c=(float) (b[1]*0.0005*10000),d=(float) (3*b[3]),e=(float) (1.36*b[3]);
        System.out.printf(a+" "+c+" "+d+" "+e);
    }
}

题目很绕,但是不难,判断条件然后输出就行

7-5 游戏角色选择

一款网游中包括4个种族:人类、精灵、兽人、暗精灵,每个种族包含三种角色:战士、法师、射手。玩家新建人物时需要选择种族和角色。请编写角色选择程序。

输入格式:

两个整数:游戏种族、角色的选项,以空格分隔。例如:1 2。
种族选项设定为:1、人类 2、精灵 3、兽人 4、暗精灵
角色选项设定为:1、战士 2、法师 3、射手

输出格式:

所选择的种族、角色的名称,以空格分隔。例如:人类 法师
若输入数值超出选项范围,输出“Wrong Format”
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a= input.nextInt(),b= input.nextInt();
        if(a<1||a>4||b<1||b>3)
            System.out.printf("Wrong Format");
        else {
            if(a==1)
                System.out.printf("人类");
            else if(a==2)
                System.out.printf("精灵");
            else if(a==3)
                System.out.printf("兽人");
            else
                System.out.printf("暗精灵");
            System.out.printf(" ");
            if(b==1)
                System.out.printf("战士");
            else if(b==2)
                System.out.printf("法师");
            else
                System.out.printf("射手");
        }
    }
}

判断是否越界,然后输出,没啥难度

7-6 学号识别

学校的学号由8位数字组成,前两位是入学年份(省略了20);第3、4位是学院编号,01代表材料学院,02代表机械学院,03代表外语学院,20代表软件学院;第5、6位是学院内部班级编号,最后两位是班级内部学号。如:18011103,入学年份是2018年,材料学院,11班,03号

输入格式:

8位数字组成的学号。例如:18011103
注意:输入学号不是8位或者学院编号不是01、02、03、20其中之一,属于非法输入

输出格式:

学号每一项的完整说明。例如:
入学年份:2018年
学院:材料学院
班级:11
学号:03

注意:如非法输入,输出“Wrong Format"
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String ch = input.next();
        if(ch.length()!=8)
            System.out.printf("Wrong Format\n");
        else
        {
            int a= (ch.charAt(2)-'0')*10+(ch.charAt(3)-'0');
            if(a!=1&&a!=2&&a!=3&&a!=20)
                System.out.printf("Wrong Format\n");
            else {
                System.out.printf("入学年份:20"+ch.charAt(0)+ch.charAt(1)+"年\n");
                System.out.printf("学院:");
                if(a==1)
                    System.out.printf("材料学院");
                else if(a==2)
                    System.out.printf("机械学院");
                else if(a==3)
                    System.out.printf("外语学院");
                else
                    System.out.printf("软件学院");
                System.out.printf("\n班级:"+ch.charAt(4)+ch.charAt(5)+"\n" +"学号:"+ch.charAt(6)+ch.charAt(7));
            }
        }
    }
}

首先判断是否为八位,然后判断第三四位是否为01、02、03、20,我这里转换成数字判断了,大家也可以直接判断。然后对应输出。

7-8 巴比伦法求平方根近似值

巴比伦法求n的近似值可以用以下公式:
nextGuess = (lastGuess+n/lastGuess)/2
程序初始运行时lastGuess可赋予一个最初的猜测值。当由公式求得的nextGuess和lastGuess相差较大时,把nextGuess的值赋给lastGuess,继续以上过程,直至nextGuess和lastGuess几乎相同,此时lastGuess或者nextGuess就是平方根的近似值。
本题要求:nextGuess和lastGuess的差值小于0.00001时认为两者几乎相同

输入格式:

1、两个浮点数,以空格分隔,第一个是n,第二个是lastGuess最初的猜测值。例如:2 1。
2、若输入的两个数中包含负数或者lastGuess初始输入为0,认定为非法输入

输出格式:

1、输出n的平方根近似值:lastGuess。例如:1.4142157
2、非法输入时输出:"Wrong Format"
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        float n = input.nextFloat(),b= input.nextFloat(),a=0;
        if(n<=0||b<=0)
        {
            System.out.printf("Wrong Format");
            return ;
        }
        a= (b+n/b)/2;
        while(Math.abs(a-b)>0.00001)
        {
            b=a;
            a= (b+n/b)/2;
        }
        System.out.printf((float)b+"\n");
    }
}

注意用float输出,用循环就能搞定。

为什么先7.8后7.7?这要问老师了。

7-9 二进制数值提取

在一个字符串中提取出其中的二进制数值序列,。

输入格式:

一个由0、1构成的序列,以-1为结束符,非0、1字符视为正常输入,但忽略不计,未包含结束符的序列视为非法输入。例如:abc00aj014421-1

输出格式:

将输入的序列去掉非0、1字符以及结尾符的数据内容,
注:结束符-1之后的0\1字符忽略不计。
例如:00011。
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String n=input.nextLine();
        int len = n.length();
        int flog = 0;//判断是否含有-1的标志位,0为没有
        int pos=0;//判断结束位,例如若-1为第7位,则pos为7
        for(int i=0;i<len-1;i++)
        {
            if(n.charAt(i)=='-'&&n.charAt(i+1)=='1')
            {
                flog = 1;
                pos=i;
                break;
            }
        }
        if(flog==0)//如果没有就输出
        {
            System.out.printf("Wrong Format");
            return;
        }
        for(int i=0;i<pos;i++)
        {
            if(n.charAt(i)=='1'||n.charAt(i)=='0')
                System.out.printf("%c",n.charAt(i));
        }
    }
}

先判断字符串中是否含有-1,然后对-1前的序列进行一个01的提取,记得输入用nextLine(),next()读取不了空格和转义符。

7-7 判断三角形类型

输入三角形三条边,判断该三角形为什么类型的三角形。

输入格式:

在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的取值范围均为[1,200]。

输出格式:

(1)如果输入数据非法,则输出“Wrong Format”;
(2)如果输入数据合法,但三条边不能构成三角形,则输出“Not a triangle”;
(3)如果输入数据合法且能够成等边三角形,则输出“Equilateral triangle”;
(3)如果输入数据合法且能够成等腰直角三角形,则输出“Isosceles right-angled triangle”;
(5)如果输入数据合法且能够成等腰三角形,则输出“Isosceles triangle”;
(6)如果输入数据合法且能够成直角三角形,则输出“Right-angled triangle”;
(7)如果输入数据合法且能够成一般三角形,则输出“General triangle”。
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        float a= input.nextFloat(),b = input.nextFloat(),c = input.nextFloat();
        if(a>200||a<1||b>200||b<0||c>200||c<0)
        {
            System.out.printf("Wrong Format");
            return;
        }
        if(a+b<=c||b+c<=a||a+c<=b||Math.abs(a-b)>=c||Math.abs(a-c)>=b||Math.abs(b-c)>=a)
        {
            System.out.printf("Not a triangle");
            return ;
        }
        if(a==b&&b==c)
            System.out.printf("Equilateral triangle");
        else if((a==b&&b!=c)||(a==c&&b!=c)||(c==b&&a!=c))
        {
            if(Math.abs(a-b*1.414)<b*0.1||Math.abs(b-a*1.414)<a*0.1||Math.abs(c-a*1.414)<a*0.1)
                System.out.printf("Isosceles right-angled triangle");
            else
                System.out.printf("Isosceles triangle");
        //    System.out.printf(Math.abs(a-b*1.414)+" "+Math.abs(b-a*1.414)+" "+Math.abs(c-a*1.414));
        }
         else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b)
            System.out.printf("Right-angled triangle");
         else
            System.out.printf("General triangle");
    }
}

死去的的三角形知识突然攻击我hhhh
三角形三边定律 a+b>c a-b<c
逐个判断就行
唯一的难点是判断等腰直角三角形
因为精度问题hhh
a* a!=b* b +c* c,我狂wa,后面仔细想了想还是得用别的方法,具体代码里有了

溜了溜了 ~ ~

posted on 2022-09-08 10:39  大皮QAQ  阅读(173)  评论(0编辑  收藏  举报

导航

回到顶部叭QAQ