专栏文章
题解:B4397 [蓝桥杯青少年组国赛 2025] 第二题
B4397题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio276gk
- 此快照首次捕获于
- 2025/12/02 12:09 3 个月前
- 此快照最后确认于
- 2025/12/02 12:09 3 个月前
题目大意
给定 和 个整数 (),如图所示。
你的任务是找到一种填充红色圆圈的方案,所填数字必须为正整数,并满足以下条件:
- 三角形的三条边上的数字之和相等,且均为一个给定的值 。
- 所有红色圆圈和白色圆圈都是不超过 的正整数,且每个正整数互不相同。
测试数据保证答案存在且唯一。

思路
用 来表示四个红色圆圈所代表的数。每个 的含义: 表示第二行的红色圆圈, 表示第四行的红色圆圈, 表示第五行左侧的红圈, 表示第五行右侧的圆圈。
根据题意,有如下方程组。
可以发现, 中除了 其余全部已知,那么可以直接求出 。
。
其他的虽然不可以直接求,但不要漏掉了一个重要的条件。
所有红色圆圈和白色圆圈都是不超过 的正整数,且每个正整数互不相同。
所以我们可以求出 的值,只需要遍历所有的 (),判断哪些数没有出现,将这些数加起来,再减去 ,就可以得到 的值。令 。
,得如下算式。
至此,右侧的值全部已知,可以求 的值。
由 变形得 ,可以求 的值。
同理由 变形得 ,可以求 的值。
至此, 的值全部已知。
按顺序输出即可。
代码
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 条评论,欢迎与作者交流。
正在加载评论...