A.门牌制作
答案624
public class _2 {
static int ans=0;
public static void main(String[] args) {
for(int i=1;i<=2020;i++) {
int count=0;
String s=i+"";
char[] c=s.toCharArray();
for(int j=0;j<s.length();j++) {
if(c[j]=='2')count++;
}
ans+=count;
}
System.out.println(ans);
}
}
B.既约分数
答案:2481215
public class _3 {
static int ans=0;
public static void main(String[] args) {
for(int i=1;i<=2020;i++) {
for(int j=1;j<=2020;j++) {
if(gcd(i,j)==1)ans++;
}
}
System.out.println(ans);
}
static int gcd(int a,int b) {
if(b==0)return a;
return gcd(b,a%b);
}
}
C.蛇型填数
答案761
观察一下对角线就会发现按照4,8,12…这样增长,每次多四
public class _4 {
static int ans=1,x=0;
public static void main(String[] args) {
for(int i=1;i<=19;i++) {
x+=4;
ans+=x;
}
System.out.println(ans);
}
}
D.七段码
答案:80
我做的80,不保证正确,因为看有的大佬的答案比我多。
import java.util.Arrays;
public class _1 {
static int count = 0;
public static void main(String[] args) {
for (int i = 1; i < 1 << 7; i++) {
Arrays.fill(visit,false);
flag = false;
int k = 0;
while ((i >> k & 1) == 0) k++;
x=i;
dfs(k);
if (flag){
System.out.println(i);
count++;
}
}
System.out.println(count);
}
static boolean flag = false;
static int x;
static boolean[] visit=new boolean[7];
static void dfs(int k) {visit[k]=true;
if(x==0){
flag=true;
return;
}
if (k > 6) return;
if(((x>>k)&1)==1){
x -= (1 << k);
if (k == 0) {
if(!visit[k+1])dfs(k + 1);
if(!visit[k+5])dfs(k + 5);
} else if (k == 1) {
if(!visit[2])dfs(2);
if(!visit[6])dfs(6);
if(!visit[0])dfs(0);
} else if (k == 2) {
if(!visit[1])dfs(1);
if(!visit[6])dfs(6);
if(!visit[3])dfs(3);
} else if (k == 3) {
if(!visit[2])dfs(2);
if(!visit[4])dfs(4);
} else if (k == 4) {
if(!visit[3])dfs(3);
if(!visit[5])dfs(5);
if(!visit[6])dfs(6);
} else if (k == 5) {
if(!visit[0])dfs(0);
if(!visit[4])dfs(4);
if(!visit[6])dfs(6);
} else {
if(!visit[1])dfs(1);
if(!visit[5])dfs(5);
if(!visit[2])dfs(2);
if(!visit[4])dfs(4);
}
}
if(x==0){
flag=true;
}
}
}