第十一届2020-4七段码(10分)
第十届2019-4数的分解(10分)
答案:40785
#include<bits/stdc++.h>
using namespace std;
bool judge(int n) {
int t;
while (n) {
if (((t = n % 10) == 2) || t == 4) {
return true;
}
n /= 10;
}
return false;
}
bool check(int a, int b, int c) {
// 有数字出现 2 和 4,或者出现重复数字,返回 0
if (judge(a) || judge(b) || judge(c) ||
a == b || a == c || b == c) {
return false;
}
return true;
}
int main()
{
int a,b,c;
int sum=0;
for(int a=1;a<2018;a++)
for(int b=a+1;b<2018;b++)
for(int c=b+1;c<2018;c++)
{
if(a+b+c==2019)
{
sum=sum+check(a,b,c);
}
}
cout<<sum;
}
第九届2018-4测试次数(10分)
第八届2017-4魔方状态(10分)
public class 测试次数 {
public static void main(String[] args) {
int n = 1000, m = 3;
//dp[i][j]:测试i层,有j部手机,在最坏情况下的最少测试数目
int[][] dp = new int[n + 1][m + 1];
for (int i = 1; i <= m; i++) {
dp[1][i] = 1;
}
for (int i = 1; i <= n; i++) {
dp[i][1] = i;
}
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= m; j++) {
int min = Integer.MAX_VALUE;
for (int k = 1; k <= i; k++) {//从每一层开始尝试摔手机
min = Math.min(min, Math.max(1 + dp[k - 1][j - 1], 1 + dp[i - k][j]));//从摔坏和摔好中取最大值(最坏的情况)中再取最小值(最佳策略)
}
dp[i][j] = min;
}
}
for (int[] ints : dp) {
System.out.println(Arrays.toString(ints));
}
System.out.println(dp[n][m]);
}
}