Java阿尔法编程题目

1.组数字

输入相邻的4个正整数,计算这4个正整数,能组成多少个互不相同且无重复数字的三位数,并将结果输出。

import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
       System.out.println("输入四个连续的整数");
		Scanner scanner = new Scanner(System.in);
		int num1 = scanner.nextInt(); 
		int num2 = scanner.nextInt(); 
		int num3 = scanner.nextInt(); 
		int num4 = scanner.nextInt(); 
		if (num1+1 != num2){
			    System.out.println("必须输入四个连续的整数");}
		else if (num2 +1 != num3){
				System.out.println("必须输入四个连续的整数");}
		else if (num3 +1 != num4){
				System.out.println("必须输入四个连续的整数");}
		else {
					int count=0;
					for(int i=num1;i<=num4;i++)
					{
						for(int j=num1;j<=num4;j++)
						{
							for(int k=num1;k<=num4;k++)
							{
								if(i!=j && j!=k && k!=i)
								{
									count++;
								
							    }
						    }
					    }
				    }
            System.out.println(count);
			}	
    }
public class TestShu1 {
	private static int[] a={4, 2, 3, 9};//定义任意四个数字数组 
	private static int num=0;//一个组成三位数个数 
	private static int hunNum=0;//组成的三位数 
	//bai-百位, shi-十位, ge-个位
	
	public static int getHuNum(int bai, int shi, int ge){ 
		return 100*bai+10*shi+1*ge;
	}
	
	public static void main(String[] args){
		for(int i=0; i<4; i++){ 
			for(int j=0; j<4; j++){ 
				for(int m=0; m<4; m++){ 
					if(a[i]!=a[j]&&a[j]!=a[m]&&a[m]!=a[i]){ 
						hunNum=getHuNum(a[i], a[j],a[m]); 
						num++;
						System.out.println(hunNum); 
					}
				} 
			} 
		} 
		System.out.println("一共组成三位数: "+num+"个");
	}    

2.打印正整数的逆序

输入一个不多于五位的正整数 num,并输出其位数,每一位的数字,以及逆序排列的每位数字。

import java.util.Scanner;
public class Program {
   public static void main(String[] args) {
       int sum = 0;
    Scanner input = new Scanner(System.in);
    System.out.println("请输入不多于五位数的正整数:");
    int n = input.nextInt();
    String s = "" + n;
    System.out.println("它是"+s.length()+"位数");
    System.out.println(s);
    char a[] = s.toCharArray();
    char a2[] = new char[a.length];
    for(int i = 0;i<a.length;i++){ 
    char b = a[a.length-i-1];
    a2[i] = b;
    System.out.print(a2[i]);
     }
   }
}

3.杨辉三角

杨辉三角,又称贾宪三角形、帕斯卡三角形,是二项式系数在三角形中的一种几何排列。其中前10行样式如下:

1  
1   1 
1   2   1
1   3   3   1
1   4   6   4   1
1   5  10  10   5   1
1   6  15  20  15   6   1
1   7  21  35  35  21   7   1
1   8  28  56  70  56  28   8   1
1   9  36  84 126 126  84  36   9   1

编写程序,通过二维数组的方式输出杨辉三角的前9行。

public class Program {
    
    public static void main(String[] args) {
        	//定义了一个长度为10,高度为10的二维数组,数组中的值都为0;
		int[][] arr=new int[10][10];
		for(int i=0;i<arr.length; i++) {
			//由于只是给杨辉三角内的位置赋值,所以是j<=i
			for(int j=0;j<=i;j++) {
				//根据规律,使用if else 赋值
				if(j==0||j==i) {
					arr[i][j]=1;
				}else {
					arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
				}
				/*由于只是输出杨辉三角范围内的值,所以在内层循环就输出,这种方法不能全部赋值完之后再输出
					"\t"的原因是10和小于10的数组的宽度不同,所以使用\t制表符能使数与数之间距离相等
				*/
				System.out.print(arr[i][j]+"\t");
			}
			System.out.println();
    }
    }
}

4.定义一个点类

编程题

假设要在程序中描述一点,可以定义一个点类(Point)。

题目要求

定义点类(Point),内容如下:

属性:点的横坐标 x 和纵坐标 y,其中 xy都是整数,均为public。

方法:distance()表示该点到坐标原点的距离,返回类型double。

注:点到坐标原点的距离计算公式为:Math.sqrt(x*x+y*y)

本题考查面向对象相关知识,调试需要自己定义Main方法进行调试,方可运行,判题不做要求

class PointT{
    public double x,y;
    public PointT(){
    }
    
    public PointT(int x,int y){
        this.x = x;
        this.y = y;
    }
    
    public double distance(){
        double d = Math.sqrt(x*x+y*y);
        return d;
    }    
}

public class Point{
    public static void main(String[] args){
        PointT a =new PointT(3,4);
         System.out.println(a.distance());
    }
}

public class TriangleT{
public double s1,s2,s3;

public Triangle(double s1,double s2,double s3){
    this.s1 = s1;
    this.s2 = s2;
    this.s3 = s3;
}

public double getPerimeter(){
    return s1+s2+s3;
}

public String getType(){
    if(s1==s2&&s1==s3&&s2==s3)
        return equilateral;
    else if((s1==s2)||(s1==s3)||(s2==s3)){
        return isosceles;
    }
    else
        return scalene;
}

}

public class Triangle{
public static void main(String[] args){
public double s1,s2,s3;
public double v1,v2,v3;
s1 = Point.sideS1(v1,v2);
s2 = sideS2(v1,v3);
s3 = sideS3(v2,v3);
TriangleT b =new TriangleT();
System.out.println();
}

5.求素数和

「质数」又称素数,有无限个。素数定义为在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数称为素数。

例如17就是素数,因为它不能被2 - 16的任一整数整除。

请编写一个程序,输入一个正整数,计算该正整数以内的素数之和

import java.util.Scanner;
public class Program{
    public static void main (String[] args) {
      Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int sum = 0;
        int k;
        for(int i=2;i<=num;i++){
            k=0;
            for(int j=2;j<=Math.sqrt(i);j++){
                if(i%j==0){
                    k++;
                }
            }
            if(k==0){
                sum +=i;
            }
        }
        System.out.println(sum);
    }
}

6.打印三角形

输入一个正整数N,通过循环语句,打印一个2*N-1行的三角形

示例

输入

4

输出

*
***
*****
*******
*****
***
*

注意: 左侧始终没有空格

import java.util.*;
public class Program {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        
        // 先输出前n行
        for(int i=0;i<=N-1;i++){
            for(int j=0;j<2*i+1;j++){
                System.out.print("*");
            }
                System.out.println();
        }
        
        // 输出余下的n-1行
        for(int i=N-1;i>=1;i--){
            for(int j=0;j<2*i-1;j++){
                System.out.print("*");
            }
                System.out.println();
        }
    }
}

6.百钱百鸡

编程题

中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?

请用程序完成百钱百鸡问题的计算,并将计算结果输出。

输出示例:

公鸡=1 母鸡=1 小鸡=1
public class Program {
   public static void main(String[] args) {
       for(int cock=0;cock<=20;cock++){
           for(int hen=0;hen<=33;hen++){
              if(cock*5+hen*3+(100-cock-hen)/3==100&&(100-cock-hen)%3==0)
                  System.out.println("公鸡="+cock+"母鸡="+hen+"小鸡="+(100-cock-hen));
           }
       }
   }
}

7.完数

编程题

如果一个数的真因子之和等于其本身, 这个数就称之为"完数". 例如:6的真因子为1, 2, 3, 而且1 + 2 + 3 = 6, 因此6是"完数".

请用程序实现: 输入一个整数num,找出2(含) ~ num(含)中的所有完数,并输出。

import java.util.Scanner;

public class Program {
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int sum;
        for(int i=2;i<=num;i++){
            sum=0;
            for(int j=1;j<i;j++){
                if(i%j==0){
                    sum+=j;
                }
            }
            if(sum==i){
                System.out.println(i);
            }
        }
    }
}

8.数组重复值清零

定义一个长度为7的数组;

输入7位含有重复数字的整数作为数组的值;

请将重复元素(包括0)删除,并输出更新后数组中的元素。

例如: 数组{1, 2, 2, 3, 4, 5},更新后为 {1, 2, 3, 4, 5}

import java.util.*;
public class Program {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int []num = new int[7];
        for(int i=0;i<7;i++){
            num[i] = sc.nextInt();
        }
        for(int i=0;i<7;i++){
            for(int j=0;j<7;j++){
                if(num[i]==num[j]&&i!=j){
                    //切记不要让元素比较自身 不然均为0
                    num[j]=0;
                }
            }
        }
        for(int i=0;i<7;i++){
            if(num[i]!=0)
            {System.out.println(num[i]);}
        }
    }
}

9.冒泡排序

定义一个长度为9的数组;

输入9个数字,进行冒泡排序, 使其按照从小到大的顺序排列, 并将排列后的结果输出。

import java.util.*;
public class Program {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int []num = new int [9];
        for(int i=0;i<9;i++){
            num[i] = sc.nextInt();
        }
        
        for(int i=0;i<num.length;i++){
            for(int j=0;j<num.length-1-i;j++){
                if(num[j+1]<num[j]){
                    int t = num[j+1];
                    num[j+1] = num[j];
                    num[j] = t;
                }
            }
        }
        
        for(int a:num){
            System.out.print(a+" ");
        }
    }
}

10.定义圆类

定义圆类Circle,内容如下(需要完成):

属性:

圆心(center) ,Point类型,修饰符public。

半径(radius),double类型,修饰符public。

方法:

getArea(),获取圆的面积,修饰符public,返回值类型double。

point_in_circle(Circle circle,Point point),参数为一个圆类对象和一个点类对象,然后判断该点是否在圆内,在圆内则返回 True ,不在圆内则返回 False,修饰符public,返回值类型Boolean。

Math.abs(x) 链接讲解 https://blog.csdn.net/xmc281141947/article/details/56017147

Circle.java

public class Circle{
    public Point center;
    public double radius;
    
    public double getArea(){
        return radius*radius*Math.PI;
    }
    
    public boolean point_in_circle(Circle circle,Point point){
        // 根据该点与圆心之间距离与半径的比较来确定该点是否在圆内 Math.abs(x)=|x| 绝对值
        double l = Math.sqrt(Math.abs((circle.center.x-point.x)*(circle.center.x-point.x)+(circle.center.y-point.y)*(circle.center.y-point.y)));
        if(l<=radius){
            return true;
        }
        else{
            return false;
        }
    }
    
    public static void main(String[] args){
        Circle obj = new Circle();
        obj.radius = 5;
        obj.center = new Point();
        obj.center.x = 5;
        obj.center.y = 5;
        Point point = new Point();
        point.x = 1;
        point.y = 1;
        System.out.println(obj.getArea());
        System.out.println(obj.point_in_circle(obj,point));
    }
}
Point.java
    
public class Point {
    int x;
    int y;
    public double distance(){
        return Math.sqrt(x*x+y*y);
    }
}

11.银行账户建模

如下面类图所示,设计了一个名为 Account 的类,该类为银行帐户建模。

  1. 三个 public 实例变量:id(int),custom(Custom)和 balance(double)用于维持当前帐户余额。
  2. toString(),返回“ name(id), Balance=$xxx.xx”,balance四舍五入到小数点后两位。
  3. getCustomName(),获取客户姓名。
  4. deposit()方法实现存款操作,返回存款:xxx,余额:xxx,(余额四舍五入到小数点后两位)。
  5. withdraw方法实现取款操作,返回取款:xxx,余额:xxx,(余额四舍五入到小数点后两位)。

请编写Account类,及测试驱动程序,以测试所有public方法。

注:练习已预置了Customer类,可以直接使用

String.format()的详细用法 https://blog.csdn.net/anita9999/article/details/82346552

Account.java

public class Account{
    int id;
    Customer custom = new Customer();
    double balance;
    
    //public Account(){}
    /*public Account(int id,Customer custom,double balance){
        this.id = id;
        this.custom = custom;
        this.balance = balance;
    }*/
    
    public String toString(){
       return custom.name+"("+id+")"+",Balance=$"+String.format("%.2f",balance);
    }
    
    public String getCustomName(){
        return custom.name;
    }
    
    public String deposit(double a){
        balance += a; 
        return "存款:"+a+",余额:"+String.format("%2.f",balance);
    }
    
    public String withdraw(double b){
        balance -= b;
        return "取款:"+b+",余额:"+String.format("%2.f",balance);
    }
    
    public static void main(String[] args){
        Account obj = new Account();
        obj.id = 1;
        obj.custom.name = "张三";
        obj.balance = 500.354;
        System.out.println(obj.toString());
        System.out.println(obj.getCustomName());
        System.out.println(obj.deposit(20.00));
        System.out.println(obj.withdraw(10.00));
        
        
    }
}
Customer.java
    
public class Customer {
    public int id;
    public String name;
    public char gender;
    public String toString(){
        return "Customer[id="+id+",name="+name+",gender="+gender+"]";
    }

    public static void main(String[] args) {
        Customer obj = new Customer();
        obj.id = 1;
        obj.name = "张三";
        obj.gender = 'm';
        System.out.println(obj.toString());
    }
}

12.接口GeometricObject

编程题

下面类图定义了两个接口: GeometricObject 可以计算几何对象的周长与面积,另一个 Resizable 以指定的百分比修改尺寸重置几何图形的大小。

请编写接口及其两个实现类。

public interface GeometricObject{
    public double getPerimeter();
    public double getArea();
}
public class Circle implements GeometricObject{
    double radius = 1.0;
    
    public Circle(double radius){
        this.radius = radius;
    }
    
    @Override
    public double getPerimeter() {
        return radius*Math.PI*2;
    }

    @Override
    public double getArea() {
        return radius*radius*Math.PI;
    }
}
public interface Resizable {
    public double resize(int percent);
}

public class ResizableCircle extends Circle implements Resizable {

    public ResizableCircle(double radius) {
        super(radius);
    }


    @Override
    public double resize(int percent) {
        return (percent*getArea())/100;
    }
}

public class Test extends ResizableCircle{
    public Test(double radius) {
        super(radius);
    }
    public static void main(String[] args) {
        double radius = 3.0;
        Test t = new Test(radius);
    
        System.out.println("圆的面积为:"+t.getArea());
        System.out.println("圆的周长为:"+t.getPerimeter());
        System.out.println("圆修改后的尺寸为:"+t.resize(50));
    }
}

你可能感兴趣的:(java)