Java算法题挑战 Frist day

Java算法题挑战 Frist day,第1张

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 
  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来,然后听过两点线段公式来进行解答。但是我在做的时候,遇到一个精度问题。因此我认为这题考察的是对精度问题的求解。个人觉得可以使用二维数组进行优化这题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5681452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存