Java基础编程

函数题:

6-1

本题要求实现一个函数,判盘输入的整数是否是偶数,如果是偶数,返回true,否则返回false。

函数接口定义:
public static boolean isOdd(int data)
说明:其中 data 是用户传入的参数。 data 的值不超过int的范围。函数须返回 true 或者 false。

public static boolean isOdd(int data){
    if(data%2==0)
        return true;
    else return false;
}

6-2

本题要求实现一个函数,校验一个13位正整数号码是否正确。13位号码的最后一位是校验码。通过对前12位数字的加减乘除运算得到一个一位数字,如果和第13位数字相同,表示正确的号码。

1、从最右边第12位开始间隔一位个位数相加,然后乘7。

2、剩下的其余数字相加,然后乘2 。

3、再把两者加起来,除以10取余数

4、和第13位相校验,匹配就正确,不匹配则错误。

public static boolean checksum(long data){
    int i,j;
    long sum1=0,sum2=0,n=10,m=100;
    for(i=1;i<=6;i++){
        sum1=sum1+data/n%10;
        n=n*100;
    }
    sum1=sum1*7;
    for(j=1;j<=6;j++){
        sum2=sum2+data/m%10;
        m=m*100;
    }
    sum2=sum2*2;
    long sum=0;
    sum=(sum1+sum2)%10;
    if(sum==data%10)
        return true;
    else return false;
}

出错点在于没有考虑m,n溢出,定义成long类型就好了。

6-3

输入两个正整数,求它们的最大公约数与最小公倍数。

输入:两个正整数,两个整数之间用空格分开。数据保证在 int 范围内。
输出:第一行输出最大公约数;第二行输出最小公倍数。答案保证在 int 范围内。

    public static int gcd ( int m, int n ) //求最大公约数
    {
        int i,max=0,x=0;
        for(i=2;i<=m||i<=n;i++){
            if(m%i==0&&n%i==0){
                max=i;
                x=1;
            }
        }
        if(x==0)
            return 1;
        else
            return max;
    }
    public static int lcm ( int m, int n ) //求最小公倍数
    {
         int i=m,min=0;
        for(i=m;;i++){
       
            if(i%n==0&&i%m==0){
                min=i;
                break;
            }
        }
        return min;
    }

6-4

根据读入的正方形的边长(边长为正整数),输出其正方形的面积和周长。
输入数据含有多个的正方形(个数不确定)的边长a(1≤a≤10000),每个边长之间以空格隔开。
输出:每次读入一个边长,便输出其正方形的面积,每一行输出一个正方形的面积和周长,中间用空格分隔。

public static int area(int x){
    return x*x;
}
public static int length(int x){
    return 4*x;
}

谢谢。这道题不用脑子

6-5

根据输入的半径值,计算球的体积。
输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。
输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。
已知:PI=3.1415926

private static double volumn(double r) {
return 4.0/3*3.1415926*r*r*r;
}

上面的方法无法通过第二个测试点。(pta的心思真难猜。。)

private static double volumn(double r) {
return 4.0*3.1415926*r*r*r/3;
}

上面的方法可以通过pta。
原因如下:理论上讲除完再乘,这时候可能会有精度损失。(精度问题)

6-6

在数学中,从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。在线性写法中被写作C(n,m)。
组合数的计算公式为:

public static int factorial(int n){
    int sum=1,i;
    for(i=1;i<=n;i++)
        sum=i*sum;
    return sum;
} //求n的阶乘

谢谢,这道题也不要脑子。

编程题:

7-1

输出所有的水仙花数。所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

public class Main{
    public static void main(String[] args){
        int i,sum=0,a,b,c;
        for(i=100;i<=999;i++){
            a=i/10%10;
            b=i%10;
            c=i/100%10;
            sum=a*a*a+b*b*b+c*c*c;
            if(sum==i)
                System.out.println(i);
        }
    }
}

7-2

某公司标准上班时间是120小时,每小时工钱是20元, 如果上班时间超出了120小时,超出部分每小时按2倍工资发放。请编写程序计算员工月工资。

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner reader = new Scanner(System.in);
        int hour = reader.nextInt();
        int monkey;
        if(hour<0){
            System.out.println(0);
            System.exit(0);
        }
        if(hour>=0&&hour<=120){
             monkey=hour*20;
        }
        else 
            monkey=120*20+(hour-120)*40;
            System.out.println(monkey);
    }
}

不知道哪个公司员工的工作小时数可以是负数,请问老板可以给我打工吗?

7-3

给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:

年份是4的倍数而不是100的倍数;
年份是400的倍数。
其他的年份都不是闰年。

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner reader=new Scanner(System.in);
        int year=reader.nextInt();
        if(year%4==0&&year%100!=0&&year>=1990&&year<=2050)
            System.out.println("yes");
        else if(year%400==0&&year>=1990&&year<=2050)
            System.out.println("yes");
        else
            System.out.println("no");
    }
}

"年份是4的倍数而不是100的倍数;
年份是400的倍数。"我容易出错的地方emm。

7-4

学校进行成绩分级管理,取消分数制,改为成绩分级评定。具体办法是:小于60分为E类;60分至70分(不含70分)为D类;70分至80分(不含)为C类;80分至90分(不含)为B类;90分以上为A类。设计一个程序,对输入的成绩进行等价划分

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner reader=new Scanner(System.in);
        int score=reader.nextInt();
        String level= "";
        if(score<60)
            level="E";
        if(score>=60&&score<70)
            level="D";
        if(score>=70&&score<80)
            level="C";
        if(score>=80&&score<90)
            level="B";
        if(score>=90)
            level="A";
        System.out.println(level);
    }
}

我就喜欢if,if到底。。。

7-5

从键盘输入一个坐标点(x,y)的值,判断该坐标点是否在中心点在原点(0,0)、长为10、宽为5的矩形内。矩形所在位置如下图所示。

判断坐标点是否在矩形内.jpg
请编写一个程序,从键盘输入一个坐标点的横坐标及纵坐标的值,输出判断结果。

import java.util.*;
public class  Main{
    public static void main(String[] args) {
        Scanner reader=new Scanner(System.in);
        double x=reader.nextDouble();
        double y=reader.nextDouble();
        if(x>=-5&&x<=5&&y>=-2.5&&y<=2.5)
            System.out.println("In the rectangle");
        else
            System.out.println("Not in the rectangle");
    }
}

当时没看输出格式的要求,纠结在矩形“内”不应该是不包括边界嘛。

7-6

小明来到了古都西安,想去参观大唐西市!

西安的道路可以看做是与x轴或y轴垂直的直线,小明位于(a,b),而目的地位于(c,d),问最少几步可以到达。

import java.util.*;
public class  Main{
    
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        int a = reader.nextInt();
        int b = reader.nextInt();
        int c = reader.nextInt();
        int d = reader.nextInt();
        int sum=0,x,y;
        if(a>=0&&a<=1000&&b>=0&&b<=1000&&c>=0&&c<=1000&&d>=0&&d<=1000){
            if(a>c)
                x=a-c;
            else x=c-a;
            if(b>d)
                y=b-d;
            else y=d-b;
            sum=x+y;
            System.out.println(sum);       
        }
    }

}

我有个朋友也叫小明。


版权声明:本文为chengxuyuanzq原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。