第七届决赛 c++ B组 填空题
for(int i =1 ; i <= 10000; i ++){
for(int j = 1; j <= 10000; j++){
if( (i* 97 - j*127) == 1 ){
System.out.println(i + j);
return;
}
}
}
import java.util.*;
public class Main {
//static final int maxn = 1 << 10;
static ArrayList<Integer> nums = new ArrayList<>();
static int ans;
static void check(long x) {
//记录数字的状态,初始时全部标记为0
int status = 0;
//标记最低位即第0位为1
if (x == 0) status = 1;
while (x != 0) {
//获取10进制个位上的数,1移位后与上一次的状态做与运算
//不为0说明个位上的数字已经被使用,则不记录,return
if ((status & (1 << (x % 10))) != 0) return;
//记录数字使用情况
status |= (1 << (x % 10));
//消掉个位
x /= 10;
} //继续处理新的个位,直到全部消掉
//此时,原始的x的每一位都被标记到了status中且没有重复数字
nums.add(status);
}
static void dfs(int x, int y) {//从第x个合法数字往后取,当前组合状态为y
if (y == (1 << 10) - 1) {//组合可行,记录答案
ans++;
return;
}
for (int i = x; i < nums.size(); i++) {//枚举新加入数字的状态
if ((nums.get(i) & y) == 0) {//可以加入组合,去找下一个数字
dfs(i + 1, nums.get(i) | y);
}
}
}
public static void main(String[] args) {
//0-9能组合出的数字最大为 9876543210 可以枚举 1~1e5 的平方并判断是否满足每个数字最多出现一次,
//枚举算出满足题意的平方数并储存其状态
for (long i = 0; i <= 100000; i++) {
check(i * i);
}
dfs(0, 0);
System.out.println(ans);
System.out.println();
}
}
参考题解:
原文链接: https://blog.csdn.net/qq_44631615/article/details/117135772
第七届决赛 c++ C组 填空题
与第七届决赛 c++ B组 填空题 相同
第七届决赛 java B组 填空题
float s=1000;//两车的距离
float v1=10;//两车的速度
float v2=50;//鸟的速度
float t;//时间
int count=0;//次数
while(s>1)//当两车距离大于1
{
t=s/(v2+v1);//鸟到B车的时间
s=s-t*2*v1;//此时两车的距离
count++;//次数加1
t=s/(v2+v1);//鸟到A车的时间
s=s-t*2*v1;//此时两车的距离
}
System.out.println(count);
import java.util.*;
public class Main {
static int sum=0;
public static void main(String[] args) {
//从0开始搜
dfs(0);
//这道题中可以旋转4次,每次旋转对应一次镜像,所以最后求出的答案再除以8
System.out.println(sum/8);
}
//可将一个二维数组形式的排列看做是一维数组
static int[] a= new int[9];
static boolean[] st= new boolean[12];
static int[] v = {1,2,3,4,5,6,7,8,9};
static void dfs(int m) {
//如果填满了九个数 就去check一下
if(m>=9) {
check(a);
return;
}
for(int i = 0; i < 9; i++) {
if(!st[v[i]]) {
a[m] = v[i]; // 记录当前的数
st[v[i]] =true; // 走过标记
dfs(m+1);
//回溯
st[v[i]] = false; // 走完复位
}
}
}
static void check(int[] b) {
//枚举所有的可能性
int r1=a[0]+a[1]+a[2];
int r2=a[3]+a[4]+a[5];
int r3=a[6]+a[7]+a[8];
int r4=a[0]+a[4]+a[8];
int r5=a[2]+a[4]+a[6];
int r6=a[0]+a[3]+a[6];
int r7=a[1]+a[4]+a[7];
int r8=a[2]+a[5]+a[8];
//判断满不满足 满足才sum++
if(r1!=r2&&r1!=r3&&r1!=r4&&r1!=r5&&r1!=r6&&r1!=r7&&r1!=r8
&&r2!=r3&&r2!=r4&&r2!=r5&&r2!=r6&&r2!=r7&&r2!=r8
&&r3!=r4&&r3!=r5&&r3!=r6&&r3!=r7&&r3!=r8
&&r4!=r5&&r4!=r6&&r4!=r7&&r4!=r8
&&r5!=r6&&r5!=r7&&r5!=r8
&&r6!=r7&&r6!=r8
&&r7!=r8) {
sum++;
}
}
}
第七届决赛 java C组 填空题
//在4之前的数的平方都不满足两位数
for (int i = 4; i < 10000; i ++)
{
int s = i * i;
st[s % 100] = true;
}
int res = 0;
for (int i = 0; i < 100; i ++)
if(st[i]) res ++;
System.out.println(res);
public class Main {
// 定义1-14是否被访问
static int[] vis = new int[15];
// 1-14的数据
static int[] a = new int[15];
static int b1, b2, b3, b4, b5, b6, b7;
// dsf深搜
public static void dfs(int step) {
if (step == 1 || step == 8 || step == 9) {
// 已经有值,下一步搜索
dfs(step + 1);
return;
}
if (step > 14) {
b1 = 6 + a[3] + a[6] + 14;
b2 = a[2] + a[3] + a[4] + a[5];
b3 = 6 + a[4] + a[7] + 11;
b4 = a[2] + a[6] + a[10] + a[13];
b5 = a[5] + a[7] + a[11] + a[14];
b6 = 14 + a[10] + a[12] + a[14];
b7 = 11 + a[11] + a[12] + a[13];
if (b1 == b2 && b2 == b3 && b3 == b4 && b4 == b5 && b5 == b6 && b6 == b7) {
for (int i = 0; i < 15; i++) {
System.out.print(a[i] + "-");
}
}
}
// 没有被访问
for (int i = 1; i < 15; i++) {
if (vis[i] == 0) {
vis[i] = 1;
a[step] = i;
dfs(step + 1);
vis[i] = 0;
}
}
}
public static void main(String[] args) {
vis[6] = vis[14] = vis[11] = 1;
a[1] = 6;
a[8] = 14;
a[9] = 11;
dfs(1);
}
}