Java算法题挑战 Frist day

算法题打卡第一天:1 - 5题

第一题

  1. 问题描述:
    给定一个长度为n的数列,将这个数列按从小到大的顺序排列。(1<=n<=200)
  2. 代码块:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args)
    {
        Scanner in =new Scanner(System.in);
        while(in.hasNext())
        {
            int n=in.nextInt();
            int[] num=new int[n];
            for (int j=0;j<num.length;j++)   //向数组num中输值
            {
                num[j]=in.nextInt();
            }
            Arrays.sort(num);  //排序 用sort() 方法来实现
            for (int i=0;i<num.length;i++)
                System.out.print(num[i]+" ");
            }
        }
    }
  1. 个人思路方法:
    用Java中快速输入输出进行输值输入,然后通过Java本身的Arrays.sort()函数进行排序,然后按顺序进行输值遍历进行输出。

第二题

  1. 问题描述:
    等差数列是一个很有趣的数列,它的任何相邻两项的差相等。蒜头君给出一个等差数列的前两项 a1,a2,求第n项是多少?
  2. 代码块:
import java.util.*;
public class Main{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        int a1=in.nextInt();
        int a2=in.nextInt();
        int n=in.nextInt();
        int sum=1;
        int d=a2-a1;
        sum=a1+d*(n-1);    //等差数列公式:an=a1+(n-1)*d
        System.out.print(sum);
    }
}
  1. 个人思路方法:
    通过输入给出前两项的值以及要求的n项的编号,然后通过等差数列末项公式:an=a1+(n-1)*d,进行求解

第三题

  1. 问题描述:
    1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。并按从小到大的顺序进行输出。
  2. 代码块:
public class Main {
    public static void main(String[] args)
    {
        for (int i = 1; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                for (int k = 0; k < 10; k++) {
                    for (int l = 0; l < 10; l++) {
                        if (i == l && j == k) {
                            System.out.println("" + i + j + k + l);
                        }
                    }
                }
            }
        }
    }
}
  1. 个人思路方法:
    我对这题的思路就很魔性,我用了四层的for循环遍历进行了求解。各路大神有更好的方法可以在评论区和我交流交流。

第四题

  1. 问题描述:
    153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。
  2. 代码块:
import java.lang.*;
public class Main {
    public static void main(String[] args) {
        int number;
        for (number = 100; number <= 999; number++) {
            int a=number/100;
            int b=number%100/10;
            int c=number%100%10;
            int i = (int) ((Math.pow(a,3))+(Math.pow(b,3))+(Math.pow(c,3)));  
            if (number==i)
                System.out.println(number);
        }
    }
}
  1. 个人思路方法:
    这题其实是求出水仙花树题目。先给出在100到1000以内的一个输值,并按顺序依次求出百千个位上的数字,然后通过for循环遍历的方法去一个一个比对,若满足条件则输出。

第五题

  1. 问题描述:
    在这里插入图片描述

  2. 代码块:

import java.util.*;    
public class Main{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        while(in.hasNext())
        {
            double xa=in.nextDouble();
            double ya=in.nextDouble();  //尽量不要用整型,改用double型
            double xb=in.nextDouble();
            double yb=in.nextDouble();
            double len=0.0;
            len=(double)Math.sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb));
            System.out.printf("%.3f",len);
        }
    }
}
  1. 个人思路方法:
    这题我本人使用的方法很简单,就是通过输入x1,y1,x2,y2来,然后听过两点线段公式来进行解答。但是我在做的时候,遇到一个精度问题。因此我认为这题考察的是对精度问题的求解。个人觉得可以使用二维数组进行优化这题。

本人是算法界的”小白“,请各位大佬多多指教,本人解题思路并不是很优化,大佬们有好的思路,可以在评论区和我进行讨论。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值