门牌制作
import java.io.IOException;
class MC {
public void run() throws IOException {
int cnt = 0;
for (int i = 1; i <= 2020; i++) {
int x = i, t = 0;
while (x > 0){
if (x % 10 == 2) t++;
x /= 10;
}
cnt += t;
}
System.out.println(cnt);
}
}
public class Main {
public static void main(String[] args) throws IOException {
new MC().run();
}
}
寻找2020
16520
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;
class MC {
int N = 310;
int n = 300;
int[][] a = new int[N][N];
//300x300
public void run() throws IOException {
for (int i = 1; i <= n; i++) {
String s = br.readLine();
for (int j = 1; j <= n; j++) {
a[i][j] = s.charAt(j - 1) - '0';
}
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
//左右
if (j + 3 <= n && a[i][j] == 2 && a[i][j + 1] == 0 && a[i][j + 2] == 2 && a[i][j + 3] == 0 ) cnt ++;
//上下
if (i + 3 <= n && a[i][j] == 2 && a[i + 1][j] == 0 && a[i +2][j] == 2 && a[i + 3][j] == 0 ) cnt ++;
//左上右下
if (i + 3 <= n && j + 3 <= n && a[i][j] == 2 && a[i + 1][j + 1] == 0 && a[i +2][j + 2] == 2 && a[i + 3][j +3] == 0 ) cnt++;
}
}
System.out.println(cnt);
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
}
public class Main {
public static void main(String[] args) throws IOException {
new MC().run();
}
}
蛇形填数
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class MC {
int[][] a = new int[200][200];
int n = 70;
public void run() throws IOException {
int cnt = 1;
boolean f = false;
int x = 1, y = 1;
a[x][y] = cnt;
for (int i = 2; i <= n; i++) {
if (!f){
f = true;
y += 1;
cnt += 1;
a[x][y] = cnt;
for (int j = 1; j < i; j++) {
x += 1;
y -= 1;
cnt++;
a[x][y] = cnt;
}
}else {
f = false;
x += 1;
cnt += 1;
a[x][y] = cnt;
for (int j = 1; j < i; j++) {
x -= 1;
y += 1;
cnt++;
a[x][y] = cnt;
}
}
}
System.out.println(a[20][20]);
}
}
public class Main {
public static void main(String[] args) throws IOException {
new MC().run();
}
}
七段码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
class MC {
int N = 10;
int[] a = new int[N];
boolean[] st = new boolean[N];
int k1 = 7, k2 = 2;
int res = 0;
void build(int t, int[][] g){
switch (t){
case 1:
g[1][1] = 1;
g[1][2] = 1;
g[1][3] = 1;
break;
case 2:
g[3][3] = 1;
g[2][3] = 1;
break;
case 3:
g[3][3] = 1;
g[4][3] = 1;
g[5][3] = 1;
break;
case 4:
g[5][2] = 1;
break;
case 5:
g[3][1] = 1;
g[4][1] = 1;
g[5][1] = 1;
break;
case 6:
g[2][1] = 1;
break;
case 7:
g[3][2] = 1;
g[3][1] = 1;
g[3][3] = 1;
break;
default:
break;
}
}
void dfs2(int x, int y, int px, int py, int[][] g){
if (x == px && y == py) return;
if (x < 1 || x > 5 || y < 1 || y > 3) return;
if (g[x][y] == 0) return;
g[x][y] = 0;
dfs2(x - 1, y, x, y, g);
dfs2(x + 1, y, x, y, g);
dfs2(x , y - 1, x, y, g);
dfs2(x , y + 1, x, y, g);
}
void check() {
int[][] g = new int[6][4];
for (int i = 1; i <= k2; i++) {
build(a[i], g);
}
//联通性检查
int t = 0;
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 3; j++) {
if (g[i][j] == 1){
dfs2(i, j, 0, 0, g);
t++;
}
}
}
if (t == 1) {
res++;
}
}
void dfs(int cnt) {
if (cnt == k2 + 1){
check();
return;
}
for (int i = 1; i <= k1; i++) {
if (st[i] || i < a[cnt - 1]) continue;
st[i] = true;
a[cnt] = i;
dfs(cnt + 1);
st[i] = false;
}
}
public void run(){
for (int i = 1; i <= 7; i++) {
k2 = i;
dfs(1);
}
System.out.println(res);
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
}
public class Main {
public static void main(String[] args) {
new MC().run();
}
}
排序
成绩分析
import java.io.IOException;
import java.util.Scanner;
class MC {
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
int sum = 0;
public void run() throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 1; i <= n; i++) {
int x = sc.nextInt();
sum += x;
min = Math.min(min, x);
max = Math.max(max, x);
}
System.out.println(max);
System.out.println(min);
double avg = (double) sum / n;
System.out.printf("%.2f", avg);
}
}
public class Main {
public static void main(String[] args) throws IOException {
new MC().run();
}
}
单词分析
import java.io.IOException;
import java.util.Scanner;
class MC {
int[] cnt = new int['z' + 1];
public void run() throws IOException {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
for (int i = 0; i < s.length(); i++) {
cnt[s.charAt(i)] ++;
}
char c = 0;
int max = Integer.MIN_VALUE;
for (int i = 'a'; i <= 'z'; i++) {
if (cnt[i] > max){
max = cnt[i];
c = (char) i;
}else if (cnt[i] == max){
if ((char)i < c) c = (char) i;
}
}
System.out.println(c);
System.out.println(max);
}
}
public class Main {
public static void main(String[] args) throws IOException {
new MC().run();
}
}
数字三角形
import java.io.IOException;
import java.util.Scanner;
class MC {
int N = 110;
int[][] g = new int[N][N], f = new int[N][N];
public void run() throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
g[i][j] = sc.nextInt();
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
//为什么可以取最大值?例如现在是倒数第1层,该层的最大值取决于倒数第2层,倒数第二层的最大值取决于倒数第3层,如此类推
f[i][j] = Math.max(f[i - 1][j], f[i - 1][j - 1]) + g[i][j];
}
}
//从往左往右的次数差值小于等于1可知,往左往右的次数是几乎相等的且差值不超过1,说明答案在最后一层的中间位置
int res = f[n][n / 2 + 1];
if (n % 2 == 0) res = Math.max(res, f[n][n / 2]);
System.out.println(res);
}
}
public class Main {
public static void main(String[] args) throws IOException {
new MC().run();
}
}
子串分值和
import java.io.IOException;
import java.util.Scanner;
class MC {
int N = (int) (1e5 + 10);
//记录每个字符最后出现的位置
int[] pos = new int[26];
int[] f = new int[N];
public void run(){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int n = str.length();
str = " " + str;
long ans = 0;
//遍历每个字符
for (int i = 1; i <= n; i++) {
int t = str.charAt(i) - 'a';
//1代表str[i]自身这一个字符,一定会多出这种可能
//i之前有i-1个子串,加上这个str[i]最多能产生i-1种可能
f[i] = f[i - 1] + 1 + i - 1 - pos[t];
pos[t] = i;
ans += f[i];
}
System.out.println(ans);
}
}
public class Main {
public static void main(String[] args) throws IOException {
new MC().run();
}
}