第九届决赛 c++ B组 填空题
for (int i = 1; i <= 100; i++){
for(int j = 1; j <=200; j++){
for (int k = 1; k<= 40; k++){
if(i*2 + j *1 + k *5 == 200 && i == j* 10){
System.out.println(i+j+k);
return;
}
}
}
}
/*
因为每个灯要么开要么不开.30个灯可以想象成一个30位的二进制数,它的每一位是可以为0可以为1的。
我们只需要枚举二进制的数字0到2的30次方减一。
从这些二进制得来的0与1组合中挑选出符合条件的,即满足相邻不可以都是打开的灯即可,即相邻不能都是1即可。
*/
public static void main(String[] args) {
int res = 0;
for (int i = 0; i < 1 << 30; i++) {
boolean flag = true;
for (int j = 1; j < 30; j++) {
if ((i >> j & 1) == 1 && (i >> j - 1 & 1) == 1) {
flag = false;
break;
}
}
if(flag){
res++;
}
}
System.out.println(res);
}
第九届决赛 c++ C组 填空题
for (int i = 1; i <= 100; i++) {
for(int j = 1; j <= 100; j++){
if((j - 20) * 2 == i - 20 && j * 1.5 == i ){
System.out.println(j);
return;
}
}
}
import java.util.*;
public class Main {
static boolean flag[] = new boolean[10];
static int test[] = new int[10];
static int max = -1;
public static void main(String[] args) {
dfs(1);
System.out.println(max);
}
static void dfs(int step) {
if (step > 9) {
check();
return;
}
for (int i = 1; i <= 9; i++) {
if (flag[i] == false) { //没有被访问过
flag[i] = true;
test[step] = i;
dfs(step + 1);
flag[i] = false;
}
}
}
static void check() {
for (int i = 2; i <= 9; i++) {
//将10个数字 分成两部分 两部分都是数字
int a, b;
a = transfer(1, i);
b = transfer(i, 10);
int tempMax, tempNum;
tempMax = a * b;
tempNum = tempMax;
//使用hashset来判断乘积是否存在重复的值
Set<Integer> numSet = new HashSet<>();
boolean flag = false;
while (tempMax != 0) {
if ((tempMax % 10) == 0) { //不应该存在可以整除10的
flag = true;
return;
}
numSet.add(tempMax % 10);
tempMax = tempMax / 10;
}
//9个不重复数 最大乘积和原来的比较
if (numSet.size() == 9 && tempNum > max && !flag) {
System.out.println(a + "*" + b);
max = tempNum;
}
}
}
static Integer transfer(int start, int end) {
String str = new String();
for (int i = end - 1; i >= start; i--) {
str = str + test[i];
}
return Integer.parseInt(str);
}
}
第九届决赛 java B组 填空题
public static void main(String[] args) {
double x1 = 2.3;
double y1 = 2.5;
double x2 = 6.4;
double y2 = 3.1;
double x3 = 5.1;
double y3 = 7.2;
double area = Math.abs(((x1*y2+x2*y3+x3*y1)-(y1*x2+y2*x3+y3*x1))/2);
System.out.printf("%.3f",area );
}
第二题 与 第九届决赛 c++ C组 填空题第二题相同
第九届决赛 java C组 填空题
第一题 与 第九届决赛 c++ B组 填空题第一题相同
import java.util.*;
public class Main {
static final int N = 12;
static int[] A = new int[N];
static boolean finish = false;
public static void main(String[] args) {
for (int e = 12; e < 50000; e += 12) {
Arrays.fill(A, e / 12);
dfs(N - 1, e);
if (finish) break;
}
}
static void dfs(int i, int s) {
if (finish) return;
if (i < 0) {
for (int j = N - 1; j >= 0; j--)
System.out.print(A[j] + " ");
finish = true;
return;
}
int nx = 0;//用于记录除了当前海盗之外其他海盗的金币总数。
for (int j = 0; j < N; j++)
if (j != i) {//如果当前海盗不是正在处理的海盗
//如果当前海盗的金币数量是奇数,则无法均分,直接返回。
if ((A[j] % 2) == 1) return;
A[j] /= 2; //每个人打回原形,也就是除以二
nx += A[j]; //打回原形一次后,11个海盗的硬币总数为nx
}
A[i] = s - nx;//根据总金币数量和其他海盗的金币总数计算当前海盗的金币数量。
dfs(i - 1, s);//递归调用 dfs 函数处理下一个海盗
}
}