nchu-software-oop-2022-1

7-1 身体质量指数(BMI)测算
分数 10  作者 蔡轲  单位 南昌航空大学

体重是反映和衡量一个人健康状况的重要标志之一,过胖和过瘦都不利于健康,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”。

输入样例0:

在这里给出一组输入。例如:

-2  8
 

输出样例0:

在这里给出相应的输出。例如:

input out of range
 

输入样例1:

在这里给出一组输入。例如:

70 1.75
 

输出样例1:

在这里给出相应的输出。例如:

fit 
可以选择使用switch语句判断BMI所在区间,或者使用if语句逐一判断区间。在计算BMI前需要判断输入是否合法。
if(s.weight<0||s.weight>727||s.length<0||s.length>2.72){
        System.out.println("input out of range");
    }
    else{
        float BMI=s.weight/(s.length*s.length);
        if(BMI<18.5)
            System.out.println("thin");
        if(BMI>=18.5&&BMI<24)
            System.out.println("fit");
        if(BMI>=24&&BMI<28)
            System.out.println("overweight");
        if(BMI>=28)
            System.out.println("fat");
        }

 

7-2 长度质量 
分数 5  作者 蔡轲  单位 南昌航空大学
 

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

输入格式:

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

输出格式:

两个浮点数,以空格分隔,第一个是质量(以磅为单位)、第二个是长度(以英寸为单位)。例如:1.0 1.0。

输入样例:

在这里给出一组输入。例如:

0.45359237 0.0254
 

输出样例:

在这里给出相应的输出。例如:

1.0 1.0
 建议将质量和长度分别设定为两个不同的类,质量类中属性设定为weight,方法为千克进制转换输出。长度转换同理。这样主函数中只需要创建质量和长度的实例,调用其函数将其输出即可。相关进制转换如下
        a.weight=s.nextDouble();
        a.length=s.nextDouble();
        double nweight=a.weight/0.45359237;
        double nlength=a.length/0.0254;
        System.out.println((float)nweight+" "+(float)nlength);
7-3 奇数求和
分数 9  作者 蔡轲  单位 南昌航空大学

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

输入格式:

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

输出格式:

输入数列中所有奇数之和。例如:25。

输入样例:

在这里给出一组输入。例如:

1 2 3 4 5 6 7 8 9 0
 

输出样例:

在这里给出相应的输出。例如:

25
可以使用int类型数组存储10个数据,利用for循环进行逐一遍历,判断其如果对2取余为1或者对2取余为-1即为奇数。或者可以直接使用Math.abs(b%2)==1判定。也可以直接在for循环内单个数字逐一接收逐一判断相加。
for(int i=0;i<10;i++)
        {
            int b=s.nextInt();
            if(b%2==1||b%2==-1)
                sum+=b;
        }
7-4 房产税费计算2022
分数 12  作者 蔡轲  单位 南昌航空大学

房屋交易在日常生活中非常常见的事情,房屋交易时要额外支付各种税费,按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

输入样例:

在这里给出一组输入。例如:

1 100 100 90
 

输出样例:

在这里给出相应的输出。例如:

10000.0 500.0 270.0 122.4
这题思路还是很简单的,只有契税和是否首次购房相关,所以在计算契税的时候分为两种情况计算,如果是首次购房则判定其大小是属于三个区间中的哪个区间,对应其公式进行计算。其余都是按照相应公式计算。相关代码如下:
if(a.times==1){
            if(a.area<=90&&a.area>0)
                aTax=a.estimate*0.01*10000;
            else if(a.area>90&&a.area<=144)
                aTax=a.estimate*0.015*10000;
            else if(a.area>144)
                aTax=a.estimate*0.03*10000;
        }
        else
            aTax=a.estimate*0.03*10000;
        bTax=a.money*0.0005*10000;
        cTax=a.area*3;
        dTax=a.area*1.36;
7-5 游戏角色选择
分数 14  作者 蔡轲  单位 南昌航空大学

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

输入格式:

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

输出格式:

所选择的种族、角色的名称,以空格分隔。例如:人类 法师
若输入数值超出选项范围,输出“Wrong Format”

输入样例1:

在这里给出一组输入。例如:

1 2
 

输出样例1:

在这里给出相应的输出。例如:

人类 法师
 

输入样例2:

在这里给出一组输入。例如:

1 6
 

输出样例2:

在这里给出相应的输出。例如:

Wrong Format
可以使用switch去判定输入的值,非法则输出"Wrong Format"。
if(a.race>0&&a.race<=4&&a.role>0&&a.role<=3){
            switch(a.race)
            {
                case 1:race="人类";break;
                case 2:race="精灵";break;
                case 3:race="兽人";break;
                case 4:race="暗精灵";break;
            }
            switch(a.role)
            {
                case 1:role="战士";break;
                case 2:role="法师";break;
                case 3:role="射手";break;
            }
            System.out.println(race+" "+role);
        }
        else{
            System.out.println("Wrong Format");
        }
7-6 学号识别
分数 10  作者 蔡轲  单位 南昌航空大学

学校的学号由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"

输入样例:

在这里给出一组输入。例如:

18011103
 

输出样例:

在这里给出相应的输出。例如:

入学年份:2018年
学院:材料学院
班级:11
学号:03
 

输入样例1:

在这里给出一组输入。例如:

18013
 

输出样例1:

在这里给出相应的输出。例如:

Wrong Format
这里可以按照数组长度判断学号是否由8位组成,其次再判断学院编号是否合法。但判断合法性最快的方法是使用正则表达式,将正则表达式设置为"^\\d\\d((0[1-3])|20)\\d\\d\\d\\d$",将输入字符串进行非法判定,感兴趣的同学可以尝试一下。
        if(sum!=8||!(number[2]=='0'||number[2]=='2'))
        {
            System.out.println("Wrong Format");
            return;
        }
        else if(number[2]=='0'){
            if(number[3]=='1'||number[3]=='2'||number[3]=='3')
            {
            }
            else{
                System.out.println("Wrong Format");
                return;
            }
        }
        else if(number[2]=='2')
        {
            if(number[3]!='0')
            {
                System.out.println("Wrong Format");
                return;
            }
        }
        if(number[2]=='0')
        {
            switch(number[3]){
                case '1':academy="材料学院";break;
                case '2':academy="机械学院";break;
                case '3':academy="外语学院";break;
            }
        }
        if(number[2]=='2')
            academy="软件学院";
        System.out.println("入学年份:20"+number[0]+number[1]+"年");
        System.out.println("学院:"+academy);
        System.out.println("班级:"+number[4]+number[5]);
        System.out.println("学号:"+number[6]+number[7]);
    }

 

7-8 巴比伦法求平方根近似值
分数 10  作者 蔡轲  单位 南昌航空大学

巴比伦法求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"

输入样例:

在这里给出一组输入。例如:

2 1
 

输出样例:

在这里给出相应的输出。例如:

1.4142157
 

输入样例1:

在这里给出一组输入1。例如:

2 -1
 

输出样例:

在这里给出相应的输出。例如:

Wrong Format
这道题非法输入判定条件保证lastGuess大于0,以及n的值非负即可。利用while循环计算,当nextGuess和lastGuess的差值小于0.00001时即可跳出循环,这里差值小于0.00001,所以需要考虑两种情况,分别为nextGuess大和lastGuess大的情况。或者使用Math.abs判定效果相同。
if(a.n<0||a.lastGuess<=0){
            System.out.println("Wrong Format");
            return;
        }
        float nextGuess;
        nextGuess= (a.lastGuess+a.n/a.lastGuess)/2;
        while(nextGuess-a.lastGuess>=0.00001||a.lastGuess-nextGuess>=0.00001){
            a.lastGuess=nextGuess;
            nextGuess= (a.lastGuess+a.n/a.lastGuess)/2;
        }

 

7-9 二进制数值提取
分数 10  作者 蔡轲  单位 南昌航空大学

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

输入格式:

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

输出格式:

将输入的序列去掉非0、1字符以及结尾符的数据内容,
注:结束符-1之后的0\1字符忽略不计。
例如:00011。

输入样例:

在这里给出一组输入。例如:

abc00aj014421-1
 

输出样例:

在这里给出相应的输出。例如:

00011

输入样例1:

在这里给出一组输入。例如:

a0571-1k001y
 

输出样例1:

在这里给出相应的输出。例如:

01
 while循环逐个字符判断,如果不是0/1则继续向下判断,如果为0/1则存入新数组。如果当i走到大于等于数组长度,则说明没有结束符,输出Wrong Format。该题也可以使用正则表达式匹配相应格式,感兴趣的可以自行实现。
while(2>1){
            if(ch[i]=='-'&&ch[i+1]=='1')
                break;
            if(i+1>=str.length())
            {
                System.out.print("Wrong Format");
                return;
            }
            if(ch[i]=='0'||ch[i]=='1'){
                sh[j]=ch[i];
                j++;
            }
            i++;
        }

 

7-7 判断三角形类型
分数 20  作者 段喜龙  单位 南昌航空大学

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

输入格式:

在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的取值范围均为[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”。

输入样例1:

在这里给出一组输入。例如:

50 50 50.0
 

输出样例1:

在这里给出相应的输出。例如:

Equilateral triangle
 

输入样例2:

在这里给出一组输入。例如:

60.2 60.2 80.56
 

输出样例2:

在这里给出相应的输出。例如:

Isosceles triangle
 

输入样例3:

在这里给出一组输入。例如:

0.5 20.5 80
 

输出样例3:

在这里给出相应的输出。例如:

Wrong Format
先判断输入数据的合法性,如果三条边的取值不在[1,200]区间内,则输出“Wrong Format”。如果数据合法则判断其能否构成三角形,如果两边之和小于第三条边则说明不能构成三角形。判定等边三角形的条件是三边边长相等,判定满足勾股定理的则说明是直角三角形,但是如果使用a*a+b*b==c*c可能会出现几个测试用例无法通过,可能是因为存在精度问题,所以建议使用Math.abs(a*a+b*b-c*c)>1e-6,其余三角形判定都很简单。关键代码如下:
if(a<1||a>200||b<1||b>200||c<1||c>200){
            System.out.print("Wrong Format");
            return;
        }
        if(a==b&&a==c)
            type=1;
        else if(a+b<=c||a+c<=b||b+c<=a)
            type=2;
        else if((a*a+b*b-c*c<0.00001||c*c+b*b-a*a<0.00001||a*a+c*c-b*b<0.00001)&&(a==b||a==c||b==c))
                type=3;
        else if(a==b||a==c||b==c)
                type=4;
        else if(a*a+b*b==c*c||c*c+b*b==a*a||a*a+c*c==b*b)
                type=5;
        else
            type=6;

 感谢观看!!!

posted @ 2022-10-01 15:42  涿鹿  阅读(94)  评论(0)    收藏  举报