Java学习日记 (day4)

习题练习

1. 输入某年某月某日,判断这一天是这一年的第几天?输 入某年某月某日,判断这一天是这一年的第几天

package test.test2_1;

import java.util.Scanner;

public class Test_1 {
    public static int search_month(int m,int[] arr){
        if(m==2)
        {
            return -1;
        }
        for(int i=0;i<arr.length;i++){
            if(arr[i]==m){
                return 1;
            }
        }
        return 0;
    }
    public static void main(String[] args) {
        int[] arr_b_m = {1,3,5,7,8,10,12};
//定义大月,在后续使用中只需要遍历该数组,如果能找到则为大月。
//注意2月需要单独判断
        int m;
        Scanner sc = new Scanner(System.in);
        int s=sc.nextInt();
        int t=sc.nextInt();
        int total=0;
        m=search_month(s-1,arr_b_m);
        for(int i=1;i<s;i++){
            if(m==1){
                total+=31;
            }
            else if(m==-1){
                total+=28;
            }
            else if(m==0){
                total+=30;
            }
        }
        System.out.println(total+t);
    }
}

2. 有1、2、3、4个数字,能组成多少个互不相同且无重复 数字的三位数?都是多少?

package test.test2_1;

public class Test_2 {
    public static void main(String[] args) {
        for (int i = 1; i <= 4; i++) {
            for(int j = 1; j <= 4; j++) {
                for(int k = 1; k <= 4; k++){
                    System.out.print(100*i+10*j+k);
                    System.out.println();
                }
            }

        }
    }
}

3. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字 例如5+55+555+5555+55555(此时共有5个数相加),几个数相加有键盘控制 说明:从键盘中输入数字几 就计算该数字的1到几位数的和: 输入 2 就计算 2+22 输入 3 就计算3+33+333

package test.test2_1;

import java.util.Scanner;

public class Test_3    {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int sum=n;
        int total=n;
        for (int i = 0; i < n; i++) {
            sum=10*sum+n;
            if(i==n-1){
                System.out.print(sum+"=");
            }
            else{
                System.out.print(sum+"+");
            }
            total+=sum;
        }
        System.out.println(total);
    }
}

4. 求1000以内的勾股数 所谓勾股数,一般是指能够构成直角三角形3条边的3个正整数(a,b,c) a*a+b*b=c*c.

package test.test2_1;

public class Test_4 {
    public static void main(String[] args) {
        for (int i = 1; i <=100; i++) {
            for(int j = i; j <=100 ; j++){
                for(int k = j+1; k <=100 ;k++){
//该方法循环次数过高,可以进行数学运算减少循环上限
                    if(i*i+j*j==k*k){
                        System.out.println(i+","+j+","+k);
                    }
                    else if(i*i+j*j>k*k){
                        break;
                    }
                }
            }
        }
    }
}

5. 求100以内的所有素数 素数(质数)指的是除了1和自身以外就没有其他数能够整除。

package test.test2_1;

import java.util.ArrayList;
import java.util.List;

public class Test_5 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
//定义一个数组用来存放所有的质数
        System.out.print("1\t2\t3\t");
//首先把准备提前存入的数据打印出来
        list.add(2);
        list.add(3);
//这里不添加1,目的是防止n%1==0恒为真的情况
        int i=4;
        while (i<100){
            int j=0;
            while(j<list.size()){
                if(i%list.get(j)==0){
                    break ;
                }
                else
                    j++;
            }
//遍历质数表,如果数字为合数那么J的结果一定不为list.size()
            if(j==list.size()){
                list.add(i);
                System.out.print(i+"\t");
            }
            else {
                i++;
            }
        }
    }
}

6. 若一个口袋中放有12个球,其中有3个红色的,3个黄色 的,6个绿色的,从中任取8个球,问共有多少中不同的颜 色搭配?

package test.test2_1;

public class Test_6 {
    public static void main(String[] args) {
        int r=3;
        int y=3;
        int g=6;
        int count=0;
        for(int i=1;i<=g;i++){
            for(int j=1;j<=y;j++){
                for(int k=1;k<=r;k++){
                    if(r<12-i-j){
                        break;
                    }
                    else{
                        count++;
                    }
                }
            }
        }
        System.out.println(count);
    }
}

7. 编写一个Java程序在屏幕上输出1!+2!+3!+…… +10!的和。

package test.test2_1;

public class Test_7 {
    public static int jieCheng(int a){
        int r=0;
        for (int i=1;i<=a;i++){
            r+=i*i;
        }
        return r;
    }
    public static void main(String[] args) {
        int sum=0;
        for (int i=1;i<=10;i++){
            sum+=jieCheng(i);
        }
        System.out.println(sum);
    }
}

8. 古典问题:有一对兔子,从出生后第3个月起每个月都生 一对兔子,小兔子长到第三个月后每个月又生一对兔子,假 如兔子都不死,问第十二个月兔子总数为多少?

package test.test2_1;

import Algorithms.Dynamic_Programming.Fibonacci_sequence;

public class Test_8 {
    public static void main(String[] args) {
        int i;
        i=Fibonacci_sequence.fibonacci(12);
//这里调用斐波那契数列直接求结果。
        System.out.println(i);
    }
}
package Algorithms.Dynamic_Programming;

public class Fibonacci_sequence {
//斐波那契数列算法推荐使用递归
   public static int fibonacci(int n) {
        if (n == 1 || n == 2){
            return 1;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
    public static void main(String[] args) {
        System.out.println(fibonacci(10));
    }
}

9. 将一个正整数分解质因数。例如:输入90,打印出 90=233*5。 

package test.test2_1;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test_9 {
//这里我们才有老办法,先找到小于输入值的所有质数,该合数一定可以被分解成该质数的乘积。
    static List<Integer> l=new ArrayList<>();
    public static void main(String[] args) {
        l.add(2);
        l.add(3);
        int i=4;
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        while (i<n){
//这里其实只需要找到小于输入值/2的所有质数即可
            int j=0;
            while(j<l.size()){
                if(i%l.get(j)==0){
                    break ;
                }
                else
                    j++;
            }
            if(j==l.size()){
                l.add(i);
            }
            else {
                i++;
            }
        }
        System.out.print(n+"=");
        for(int k=0;k<l.size();){
            if(n==l.get(k)){
                System.out.print(l.get(k));
            }
            else if(n%l.get(k)==0){
                System.out.print(l.get(k)+"*");
                n=n/l.get(k);
                k=0;
            }
            k++;
        }
    }
}

10. 一个整数,它加上100后是一个完全平方数,再加上 168又是一个完全平方数,请问该数是多少?

package test.test2_1;

public class Test_10 {
    public static boolean square_Com(int i){
        double temp=Math.sqrt((double)i);
        int b_z=(int)temp;
        double a_z=temp-(double)b_z;
        if(a_z==0){
            return true;
        }
        return false;
    }
    public static void main(String[] args) {
        int i=10;
        while(true) {
            if(square_Com(i+100)&&square_Com(i+168)){
                System.out.println(i);
                break;
            }
            else
                i++;
        }
    }
}

  • 50
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值