B.卡片
首先看懂题目要求,从2021 个 0~9 中组合,问一共能拼到多少?
我们用一个数组来表示0~9 的数字个数,每次用到一个数字都相应的减去-1;直到count=-1;
package com.lanqiao2021;
import java.util.Arrays;
public class BMain {
static int[] arr=new int[10];
public static void main(String[] args) {
Arrays.fill(arr, 2021);
for(int i=1;i<20210;i++) {
if(!isReach(i)) {
System.out.println(i-1);
break;
}
}
}
public static boolean isReach(int num) {
while(num!=0) {
arr[num%10]--;
if(arr[num%10]<0) return false;
num=num/10;
}
return true;
}
}
答案: 3181
C.直线
package com.lanqiao2021;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CMain {
static List<Position> positions=new ArrayList<>();
public static void main(String[] args) {
//y=k*x+b 确定k,b 则直线就唯一了
for(int x=0;x<=19;x++) {
for(int y=0;y<=20;y++) {
for(int x1=0;x1<19;x1++) {
for(int y1=0;y1<=20;y1++) {
if(x!=x1) {
double k=(double)(y1-y)/(x1-x);
double b=y-k*x;
positions.add(new Position(k,b)<