链接: link
描述
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序。例如:
“car” < “carriage” < “cats” < "doggies < “koala”
2.根据字符串的长度排序。例如:
“car” < “cats” < “koala” < “doggies” < “carriage”
考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。
输入描述:
输入第一行为字符串个数n(n ≤ 100) 接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成
输出描述:
如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically",
如果根据长度排列而不是字典序排列输出"lengths",
如果两种方式都符合输出"both",否则输出"none"
示例1
输入:
3
a
aa
bbb
输出:
both
本题就是判断一个字符串数组,从0-n,是否满足按照字典排序和长度排序。
字典排序:就是根据字符串的每个字母的大小判断,比如数组{“aa”,“bb”},因为b的比a大(ASCII的大小判断),多以符合字典排序。
长度排序:就是根据每一个字符串的大小来判断,如果后一个比前一个的长度长就符合,比如{“aaa”,“aaaaa”},后一个字符串长度为5,前一个为3,所以也符合长度排序。
最后就只需要判断符合那个条件就可以了。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static boolean zidian(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 fun(String[] str)
{
for(int i=0;i<str.length-1;i++)
{
if(str[i].length()>str[i+1].length())
{
return false;
}
}
return true;
}
public static void main(String[] args) {
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();
}
boolean zd = zidian(str);
boolean len = fun(str);
if (zd && len) {
System.out.print("both");
} else if (zd) {
System.out.print("lexicographically");
} else if (len) {
System.out.print("lengths");
} else {
System.out.print("none");
}
}
}
链接: link
描述
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
数据范围:1 \le a,b \le 100000 \1≤a,b≤100000
输入描述:
输入两个正整数A和B。
输出描述:
输出A和B的最小公倍数。
示例1
输入:
5 7
输出:
35
这道题很简单,既然要求最小的公倍数,那么就需要先求出两个值的最小值,然后从最小值开始依次遍历,知道两个数的乘积,这个时候就一定是两个数的公倍数了。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
int ret=a>b?b:a;
for(int i=ret;i<=a*b;i++)
{
if(i%a==0&&i%b==0)
{
System.out.println(i);
return;
}
}
}
}
2.A派生出子类B,B派生出子类C,并且在java源代码中有如下声明:(A)
A a0=new A();
A a1=new B();
A a2=new C();
以下哪个说法是正确的?
A 第1行,第2行和第3行的声明都是正确的
B 第1,2,3行都能通过编译,但第2,3行运行时出错
C 第1,2行能通过编译,但第3行编译出错
D 只有第1行能通过编译
因为继承有传递性,向上传递
3.以下说法错误的是(C)
A 数组是一个对象
B 数组不是一种原生类
C 数组的大小可以任意改变
D 在Java中,数组存储在堆中连续内存空间里
数组的大小一旦确定,不能被改变,不能自动扩容
4.Test.main() 函数执行后的输出是(D)
public class Test {
public static void main(String [] args){
System.out.println(new B().getValue());
}
static class A{
protected int value;
public A(int v) {
setValue(v);
}
public void setValue(int value){
this.value = value;
}
public int getValue(){
try{
value++;
return value;
} catch(Exception e){
System.out.println(e.toString());
} finally {
this.setValue(value);
System.out.println(value);
}
return value;
}
}
static class B extends A{
public B() {
super(5);
setValue(getValue() - 3);
}
public void setValue(int value){
super.setValue(2 * value);
}
}
}
A 11 17 34
B 22 74 74
C 6 7 7
D 22 34 17
finally一定会触发
break可以跳出循环,return也可以,但是这道题加上了true/false,由于不知道方法的返回值类型,所以错误
7.一个以”.java”为后缀的源文件(C)
A 只能包含一个类,类名必须与文件名相同
B 只能包含与文件名相同的类以及其中的内部类
C 只能有一个与文件名相同的类,可以包含其他类
D 可以包含任意类
可以包含很多的类,但是只有一个public类
8.如下Java语句
double x= 3.0;
int y=5;
x/=–y;
执行后, x的值是(D)
A 3
B 0.6
C 0.4
D 0.75
x=x/–y
是先把y–,再除,并且由于x是double类型的,所以结果也是double类型的
9.下列代码运行后输出结果为(A)
public class Test1 {
static int cnt = 6;
static {
cnt += 9;
}
public static void main(String[] args) {
System.out.println(“cnt =” + cnt);
}
static {
cnt /= 3;
}
}
A cnt=5
B cnt=2
C cnt=3
D cnt=6
这道题考查的是静态方法,这种情况下我们一定要执行全部的静态方法