import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
//BufferedReader可以从字符流中读取文本并缓存
//"car" < "cats" < "koala" < "doggies" < "carriage"
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String[] str = new String[n];
for(int i = 0; i < n; i++){
str[i] = in.next();
}
//判断
if(isSortDictionary(str) && isSortLength(str)){
System.out.println("both");
}else if(isSortDictionary(str)){
System.out.println("lexicographically");
}else if(isSortLength(str)){
System.out.println("lengths");
}else{
System.out.println("none");
}
}
public static boolean isSortDictionary(String[] str){
for(int i = 0; i < str.length - 1; i++){
if(str[i].compareTo(str[i+1]) > 0){
return false;
}
}
return true;
}
public static boolean isSortLength(String[] str){
for(int i = 0; i < str.length - 1; i++){
if(str[i].length() > str[i+1].length()){
return false;
}
}
return true;
}
}
(1)如何给字符串数组赋值?
方法一:用next();
方法二:
//BufferedReader可以从字符流中读取文本并缓存
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] str = new String[n];
for(int i = 0; i < n; i++){
str[i] = br.readLine();
}
(2)之后写两个排序判断方法,
字典排序用compareTo进行比较,如果前一个元素是比后一个元素大,则说明排序混乱,因为是前一个和后一个排序,所以for的循环条件必须是length-1,否则当i遍历到最后一个元素时,已经没有下一个元素了,此时str[i+1]就会越界
长度排序按照上述原理根据length()来进行比较,如果前一个元素的长度大于后一个元素的长度,则说明排序混乱,返回false;
(3)接着进行判断即可,两个都满足,或者满足其中一个,或者一个都不满足
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int m = in.nextInt();
int n = in.nextInt();
long mn = (long) m*n/gbc(m,n);
//long i = (long) 50000 * 50000;
System.out.println(mn);
}
//求最大公约数
public static int gbc(int m, int n){
if(m == n){
return m;
}
if(m < n){
int tmp = m;
m = n;
n = tmp;
}
int r = 0;
while((r = m % n) > 0){
//辗转相除法
m = n;
n = r;
}
return n;
}
}
求A,B最小公倍数的公式:A * B / (A,B 的最大公约数)
所以只要求出A,B的最大公约数就能求出最小公倍数
【求最大公约数】
用辗转相除法
如果两数相同,则两数的最大公约数就是它们本身
如果两数不相同,找出最大的那个数,求10 和 6 的最大公约数,10 % 6 = 4,此时求10和6的最大公约数就相当于求,6和4的最大公约数,接着6 % 4 = 2,此时求6和4的最大公约数,就相当于求4和2的最大公约数,接着4 % 2 = 0,则4和2 的最大公约数就是2,这也是10和6的最大公约数
如果求出了最大公约数就可以计算最小公倍数了,这里有一个细节,那就是,int的范围,因为int涉及到A*B,如果A=5W, B = 5W, 那么A*B= 25W,这个数字太大了,int存不下,所以改成用long来接收~