JAVA基础 习题

这篇博客主要展示了如何使用JAVA编写一个矩阵填充算法,该算法将1至n的平方数以特定规律填充到一个n×n的矩阵中。代码中详细解释了每一部分的功能,包括初始化矩阵、设置边界条件以及填充内部元素。最后通过遍历并打印矩阵来展示结果。
一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3
1. 编程找出1000以内的所有完数。
  
for(int i=1; i<=1000; i++) //找出要处理的数
        {
            int sum = 0;
            for(int j=1; j<i; j++) //找到因子
            {
                if(i%j==0) //如果能整除,表示这个j是该数的一个因子
                {
                    sum = sum + j;
                }
            }
            //程序运行到该行时,sum中保存的就是该数所有因子的和
            if(i==sum)
            {
                System.out.println(i+"是一个完数");
            }
        }

2. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
   求它在第10次落地时,共经过多少米?第10次反弹多高?

    public static void main(String[] args)
    {
        double h1 = 100.0;
        double high = h1/2; //第1次落下
        double sum = 0.0;


        for(int i=1; i<10; i++) //有规律的落下弹起共有9次
        {
            sum = high*2+sum; //high
            high = high/2; //high /= 2;
        }


        System.out.println("第10次落下共经过"+(sum+100)+"米");


        System.out.println("第10次反弹"+high+"米");
    }


3. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?   
分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
 public static void main(String[] args)
    {
        int n=0;
        for(int i=1; i<=4; i++)
        {
            for(int j=1; j<=4; j++)
            {
                if(j==i)
                {
                    continue;
                }
                for(int k=1; k<=4; k++)
                {
                    if(k==i || k==j)
                    {
                        continue;
                    }
                    n++;
                    System.out.println(i*100+j*10+k);
                }
            }
        }


        System.out.println("这样的数共有"+n+"个");
    }
4. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?   
  分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

  public static void main(String[] args)
    {
        for(int i=1; i<=100000; i++)
        {
            if(Math.sqrt(i+100)%1==0)
            {
                if(Math.sqrt(i+100+168)%1==0)
                {
                    System.out.println(i+"是所要找的整数");
                }
            }


            /*
                如下代码可以判断i是否为完全平方数
                //开方运算要利用java提供数学库中的一个方法Math.sqrt()
                t = Math.sqrt(i);
                //浮点取模,用待处理的数不断的除模,直到余数小于这个数为止,
                //得到的余数就是结果
                t = t%1; //浮点对1取模会得到小数部分


                if(t==0) //判断开方的结果是否为整数
                {
                }
            */
        }
    }


5. 输入某年某月某日,判断这一天是这一年的第几天?    
   分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
  
 public static void main(String[] args)
    {
        int yy = 2017;
        int mm = 5;
        int dd = 27;


        switch (mm-1)
        {
            case 11:
                dd = dd+30;
            case 10:
                dd = dd+31;
            case 9:
                dd = dd+30;
            case 8:
                dd = dd+31;
            case 7:
                dd = dd+31;
            case 6:
                dd = dd+30;
            case 5:
                dd = dd+31;
            case 4:
                dd = dd+30;
            case 3:
                dd = dd+31;
            case 2:
                dd = dd+28;
            case 1:
                dd = dd+31;
        }


        //如果是闰年并且3月和之后的月份要加上1天
        if(yy%4==0&&yy%100!=0||yy%400==0)
        {
            if(mm>=3)
            {
                dd++;
            }
        }


        System.out.println("是这年的第"+dd+"天");


    }

6. 打印出如下图案(菱形)
*    
***    
******    
********    
******    
***    
*    
分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。




7. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。    
   分析:抓住分子与分母的变化规律。
 public static void main(String[] args)
    {
        double fz = 2.0;
        double fm = 1.0;
        double sum = fz/fm;


        for(int i=2; i<=20; i++)
        {
            System.out.println(fz+"/"+fm);
            double t = fz; //防止过程中内容改变,先将分子保存起来
            fz = fz+fm;
            fm = t;
            sum = sum + fz/fm;
        }


        System.out.println("前20项的和是:"+sum);


    }



8.  有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。    问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?    
    分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁)    ,再往回推。

    public static int age(int n)
    {
        if(n==1)
        {
            return 10;
        }


        return age(n-1)+2;
    }


    public static void main(String[] args)
    {


        System.out.println("第1个人的年龄是:"+age(5));


//        int a = 10;
//
//        for(int i=2; i<=5; i++)
//        {
//            a = a+2;
//        }
//
//        System.out.println("第1个人的年龄是:"+a);
    }


9.  一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。  

 public static void main(String[] args)
    {
        for(int i=10000; i<=99999; i++)
        {
            int gw = i%10; //个位
            int ww = i/10000; //万位


            int sw = (i/10)%10; //十位
            int qw = (i/1000)%10; //千位


            if(gw==ww && sw==qw)
            {
                System.out.println(i+"是一个回文");
            }
        }
    }


10. 打印出杨辉三角形(要求打印出10行如下图)  
1    
1   1    
1   2   1    
1   3   3   1    
1   4   6   4   1    

1   5   10   10   5   1  


public static void main(String[] args)
    {
        int n = 10;
        int[][] arr = new int[n][n];


        //处第1个元素
        arr[0][0] = 1;


        for(int i=1; i<n; i++)
        {
            //每行的第0列和最后一列的元素固定为1
            arr[i][0] = 1;
            arr[i][i] = 1;


            //将每行的第1列到每i-1列进行处理
            //该元素 = 上一行的上一列元素 + 上一行的该列元素
            for(int j=1; j<i; j++)
            {
                arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
            }
        }


        //输出结果
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<=i; j++)
            {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
    }




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值