1.题目描述:
//X 和同学跳高跳远
// 给定一个n为人数
//第二行和第三行输入n个字母 代表n个人的成绩排名(每个字母都不相同)
//例:输入 10
// ABCDEFXIGH X前面有ABCDEF
// AHCXBDEFIG X前面有AHC 所以两次相比 X 最好成绩是第三名 最差成绩第八名
//输出 3 8
解题思路:
将X前面的同学放在set1 中,set2中放X后面的同学
判断set1中包含多少个第二行在X前面的同学,set2 中包含多少个第二行在X后面的同学
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
//X 和同学跳高跳远
// 给定一个n为人数
//第二行和第三行输入n个字母 代表n个人的成绩排名(每个字母都不相同)
//例:输入 10
// ABCDEFXIGH X前面有ABCDEF
// AHCXBDEFIG X前面有AHC 所以两次相比 X 最好成绩是第三名 最差成绩第八名
//输出 3 8
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] arr1 = new String[n];
String[] arr2 = new String[n];
for (int i = 0;i < n;i++){
arr1[i] = sc.next();
}
for (int i = 0;i < n;i++){
arr2[i] = sc.next();
}
int count = 0;
int count2 = 0;
for (int i = 0;i < n;i++){
if (arr1[i].equals("X")){
count = i;
break;
}
}
for (int i = 0;i < n;i++){
if (arr2[i].equals("X")){
count2 = i;
break;
}
}
//System.out.println(count + " " + count2);
Set<String> set = new HashSet<>();
Set<String> set2 = new HashSet<>();
for (int i = 0;i < count;i++){
set.add(arr1[i]);
}
for (int i = count;i < n;i++){
set2.add(arr1[i]);
}
int first = 1;
int end = n+1;
for (int i = 0;i < count2;i++){
if (set.contains(arr2[i])){
first++;
}
}
for (int i = count2;i < n;i++){
if (set2.contains(arr2[i])){
end--;
}
}
System.out.println(first + " " + end);
}
}
2.螺旋打印斐波那契数列
输入 3
输出
输入 4
输出
import java.util.Scanner;
//螺旋打印斐波那契数
public class Main2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] res = new int[n][n];
int right = 1,down = 2,left = 3,up = 4;
int num = n*n;
int dir = right;//标记
int[] arr = new int[num];
arr[0] = 1;
arr[1] = 1;
for (int i = 2;i < num;i++){
arr[i] = arr[i-1] + arr[i-2];
}
int i = 0,j = 0;//i,j必须放外面,否则打印有误
for (int p = num-1;p >= 0;p--){
res[i][j] = arr[p];
if (dir == right){ //从左向右打印
if (j +1 < n && res[i][j+1] == 0){
j++;
}else {//打印到头,从上到下打印
i++;
dir = down;
continue;
}
}
if (dir == down){//从上到下打印
if (i+1 < n && res[i+1][j] == 0){
i++;
}else {
j--;
dir = left;//打印到头,从右到左打印
continue;
}
}
if (dir == left){//从右到左打印
if (j-1 >= 0 && res[i][j-1] == 0) {
j--;
}else {
i--;
dir = up;//打印到头,从下到上打印
continue;
}
}
if (dir == up){//从下到上打印
if (i-1 >= 0 && res[i-1][j] == 0){
i--;
}else {
j++;
dir = right;//打印到头,从左到右打印
continue;
}
}
}
for (int p = 0;p < res.length;p++){
for (int q = 0;q < res.length;q++){
System.out.print(res[p][q] + " ");
}
System.out.println();
}
}
}