算法题打卡第一天:1 - 5题
第一题
- 问题描述:
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。(1<=n<=200) - 代码块:
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]+" ");
}
}
}
- 个人思路方法:
用Java中快速输入输出进行输值输入,然后通过Java本身的Arrays.sort()函数进行排序,然后按顺序进行输值遍历进行输出。
第二题
- 问题描述:
等差数列是一个很有趣的数列,它的任何相邻两项的差相等。蒜头君给出一个等差数列的前两项 a1,a2,求第n项是多少? - 代码块:
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);
}
}
- 个人思路方法:
通过输入给出前两项的值以及要求的n项的编号,然后通过等差数列末项公式:an=a1+(n-1)*d,进行求解
第三题
- 问题描述:
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。并按从小到大的顺序进行输出。 - 代码块:
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);
}
}
}
}
}
}
}
- 个人思路方法:
我对这题的思路就很魔性,我用了四层的for循环遍历进行了求解。各路大神有更好的方法可以在评论区和我交流交流。
第四题
- 问题描述:
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。 - 代码块:
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);
}
}
}
- 个人思路方法:
这题其实是求出水仙花树题目。先给出在100到1000以内的一个输值,并按顺序依次求出百千个位上的数字,然后通过for循环遍历的方法去一个一个比对,若满足条件则输出。
第五题
-
问题描述:
-
代码块:
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);
}
}
}
- 个人思路方法:
这题我本人使用的方法很简单,就是通过输入x1,y1,x2,y2来,然后听过两点线段公式来进行解答。但是我在做的时候,遇到一个精度问题。因此我认为这题考察的是对精度问题的求解。个人觉得可以使用二维数组进行优化这题。
本人是算法界的”小白“,请各位大佬多多指教,本人解题思路并不是很优化,大佬们有好的思路,可以在评论区和我进行讨论。