小红书笔试3.26
三道编程,过了2.81
第一题字符串解密,没考算法
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//
char[] arr = new char[26];
for (int i = 0; i < 26; i++) {
arr[i] = (char) ('a' + i);
}
String s = scanner.next();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
int a = s.charAt(i) - 'a';
int b = (a -3 + 26) % 26;
sb.append(arr[b]);
}
System.out.println(sb);
}
}
第二题贪心,找到从1开始最长递增序列的长度x,然后总长度-x 之后再对k向上取整即可
import java.io.*;
import java.util.*;
public class Main4 {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static int nextInt() throws IOException {
in.nextToken();
return (int)in.nval;
}
public static void main(String[] args) throws IOException {
int m = nextInt();
while (m -- > 0){
int n = nextInt();
int k = nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = nextInt();
}
int ans = 0;
int a = 1;
for (int i = 0; i < n; i++) {
if (arr[i] == a) a++;
}
int t = n - a + 1;
if (t % k == 0) ans = t / k;
else ans = t / k + 1;
System.out.println(ans);
}
}
}
第三题 只会暴力模拟一下,过了81%,后面看朋友们说把for循环里面的if提出来就行,嗐,我没想到是这里慢了
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(br.readLine());
int[] arr= new int[n];
String[] sarr = br.readLine().split(" ");
// System.out.println(Arrays.toString(sarr));
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(sarr[i]);
}
int m = Integer.parseInt(br.readLine());
int[] l = new int[m];
int[] r = new int[m];
int[] x = new int[m];
sarr = br.readLine().split(" ");
for (int i = 0; i < m; i++) {
l[i] = Integer.parseInt(sarr[i]) - 1;
}
sarr = br.readLine().split(" ");
for (int i = 0; i < m; i++) {
r[i] = Integer.parseInt(sarr[i]) - 1;
}
String s = br.readLine();
char[] ope = new char[m];
for (int i = 0; i < s.length(); i++) {
ope[i] = s.charAt(i);
}
sarr = br.readLine().split(" ");
for (int i = 0; i < m; i++) {
x[i] = Integer.parseInt(sarr[i]);
}
for (int i = 0; i < m; i++) {
// 第i次操作
for (int j = l[i]; j <= r[i] ; j++) {
// j是数组arr的下标
if (ope[i] == '='){
arr[j] = x[i];
}else if (ope[i] == '&'){
arr[j] &= x[i];
}else {
arr[j] |= x[i];
}
}
}
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
}
#笔试#