专栏文章

题解:B4397 [蓝桥杯青少年组国赛 2025] 第二题

B4397题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio276gk
此快照首次捕获于
2025/12/02 12:09
3 个月前
此快照最后确认于
2025/12/02 12:09
3 个月前
查看原文

题目大意

给定 ss88 个整数 aia_ii[1,8]i\in[1,8]),如图所示。
你的任务是找到一种填充红色圆圈的方案,所填数字必须为正整数,并满足以下条件:
  • 三角形的三条边上的数字之和相等,且均为一个给定的值 ss
  • 所有红色圆圈和白色圆圈都是不超过 1212 的正整数,且每个正整数互不相同
测试数据保证答案存在且唯一。

思路

xix_i 来表示四个红色圆圈所代表的数。每个 xix_i 的含义:x1x_1 表示第二行的红色圆圈,x2x_2 表示第四行的红色圆圈,x3x_3 表示第五行左侧的红圈,x4x_4 表示第五行右侧的圆圈。
根据题意,有如下方程组。
{a1+a2+a4+x2+a8=s1a1+x1+a3+a5+x3=s2x3+x4+a6+a7+a8=s3\begin{cases} a_1+a_2+a_4+x_2+a_8=s\quad \text{\textcircled 1}\\ a_1+x_1+a_3+a_5+x_3=s\quad \text{\textcircled 2} \\ x_3+x_4+a_6+a_7+a_8=s\quad \text{\textcircled 3} \end{cases}
可以发现,1\text{\textcircled 1} 中除了 x2x_2 其余全部已知,那么可以直接求出 x2x_2
x2=sa1a2a4a8x_2=s-a_1-a_2-a_4-a_8
其他的虽然不可以直接求,但不要漏掉了一个重要的条件。
所有红色圆圈和白色圆圈都是不超过 1212 的正整数,且每个正整数互不相同
所以我们可以求出 x1+x3+x4x_1+x_3+x_4 的值,只需要遍历所有的 iii[1,12]i\in[1,12]),判断哪些数没有出现,将这些数加起来,再减去 x2x_2,就可以得到 x1+x3+x4x_1+x_3+x_4 的值。令 x=x1+x3+x4x=x_1+x_3+x_4
2+3\text{\textcircled 2}+\text{\textcircled 3},得如下算式。
a1+a3+a5+a6+a7+a8+x1+x3+x4+x3=2×sx3=2×s(a1+a3+a5+a6+a7+a8+x1+x3+x4)x3=2×s(a1+a3+a5+a6+a7+a8+x)a_1+a_3+a_5+a_6+a_7+a_8+x_1+x_3+x_4+x_3=2\times s \\ x_3=2\times s-(a_1+a_3+a_5+a_6+a_7+a_8+x_1+x_3+x_4) \\ x_3=2\times s-(a_1+a_3+a_5+a_6+a_7+a_8+x)
至此,右侧的值全部已知,可以求 x3x_3 的值。
2\text{\textcircled 2} 变形得 x1=sa1a3a5x3x_1=s-a_1-a_3-a_5-x_3,可以求 x1x_1 的值。
同理由 3\text{\textcircled 3} 变形得 x4=sa6a7a8x3x_4=s-a_6-a_7-a_8-x_3,可以求 x4x_4 的值。
至此,x1,x2,x3,x4x_1,x_2,x_3,x_4 的值全部已知。
按顺序输出即可。

代码

CPP
#include <bits/stdc++.h>   
using namespace std;  
int a[9],b[13]; 
int main(){            
	int s,x1,x2,x3,x4,x=0;
	cin>>s;
	for(int i=1;i<=8;i++)
	{
		cin>>a[i];
		b[a[i]]++;
	}
	x2=s-a[1]-a[2]-a[4]-a[8];
	b[x2]++;
	for(int i=1;i<=12;i++)
	{
		if(b[i]==0)
		{
			x+=i;
		}
	}
	x3=s*2-(a[1]+a[3]+a[5]+a[6]+a[7]+a[8])-x;
	x1=s-a[1]-a[3]-a[5]-x3;
	x4=s-x3-a[6]-a[7]-a[8];
	cout<<x1<<" "<<x2<<" "<<x3<<" "<<x4;
	return 0;        
} 

评论

0 条评论,欢迎与作者交流。

正在加载评论...