学习做网站建设的学校李勇seo的博客
目录
一、两种排序方法
(1)原题再现
(2)问题分析
(3)完整代码
二、最小公倍数
(1)原题再现
(2)问题分析
(3)完整代码
一、两种排序方法
(1)原题再现
两种排序方法__牛客网
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法:
1.根据字符串的字典序排序。例如:
"car" < "carriage" < "cats" < "doggies < "koala"
2.根据字符串的长度排序。例如:
"car" < "cats" < "koala" < "doggies" < "carriage"
考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。输入描述:
输入第一行为字符串个数n(n ≤ 100) 接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成
输出描述:
如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically", 如果根据长度排列而不是字典序排列输出"lengths", 如果两种方式都符合输出"both",否则输出"none"
(2)问题分析
本题在我看来是对字符串String类型的考察,直接使用String的相关方法做是最简单的,当中需要注意的是在String类中有一个compareTo方法,内部设置直接就是按照字典序设定的。strA.compareTo(strB);返回得到一个int类型。如果字符串strA按照字典序排在字符串strB的前面,就会得到一个小于0的数;反之,如果字符串strA按照字典序排在字符串strB的后面,就会得到一个大于0的数;两个字符串相等,就会得到0。如果知道这个方法,题目就会很好做,不然就得对字符串里的每一个字符逐一比较,很有可能会遗漏一些情况。
关于String的更多相关知识指路:
Java基础之神奇String类(一)_小熊爱吃软糖吖的博客-CSDN博客
Java基础之神奇String类(二)_小熊爱吃软糖吖的博客-CSDN博客
(3)完整代码
import java.util.*; public class Main{public static void main(String[] args) {// TODO 自动生成的方法存根Scanner sc=new Scanner(System.in);int n=sc.nextInt();String [] str=new String[n];for(int i=0;i<n;i++) {String s=sc.next();str[i]=s;}if(len(str)&&!lex(str)) {System.out.println("lengths");}else if(lex(str)&&!len(str)) {System.out.println("lexicographically");}else if(lex(str)&&len(str)) {System.out.println("both");}else {System.out.println("none");} }public static boolean len(String [] str) {for(int i=1;i<str.length;i++) {if(str[i-1].length()>=str[i].length()){return false;}}return true;}public static boolean lex(String [] str) {for(int i=1;i<str.length;i++) {if(str[i-1].compareTo(str[i])>0) {return false;}}return true; } }
二、最小公倍数
(1)原题再现
求最小公倍数__牛客网
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
(2)问题分析
这道题很常见,最容易想到的方式是暴力求解,利用一个for循环,从1一直到a*b,直到找出最小的公倍数。在我看来,记住公式是最快捷的方法,两个数的乘积=最大公约数*最小公倍数。求解最大公约数可以用辗转相除法:两数中较大的数(max)为除数,较小的数(min)为被除数,当max%min!=0时,将min赋值给max,max除以min的余数赋值给min,直至==0时,较小的数(min)就是最大公约数。得到最大公约数就可以很容易求解最小公倍数了。
(3)完整代码
import java.util.*; public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);int a=sc.nextInt();int b=sc.nextInt();int LCD=a*b/GCD(a,b);System.out.println(LCD);}public static int GCD(int a,int b) {//最大公约数int x=Math.min(a, b);int y=Math.max(a, b);while(y%x!=0) {int rel=y%x;y=x;x=rel;}return x;} }