返回题解分享
讨论 / 题解分享/ 帖子详情

纸牌三角形(结果填空) - 题解

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int cnt;
int a[9]={1,2,3,4,5,6,7,8,9};
int main()
{
	do{
		bool flag=false;
		if(a[1]+a[3]+a[5]==a[2]+a[4]+a[8]&&a[0]+a[1]+a[3]==a[6]+a[7]+a[8])
		{
			for(int i=0;i<9;i++)cout<<a[i]<<" ";
			puts("");
			cnt++;
			flag=true;
		}
		
	}while(next_permutation(a,a+9));
	cout<<cnt/2/3<<endl;// 旋转/3  镜像/2 
	return 0;
}
4 回复 0 转发 0 喜欢 471 阅读
回复 (4)
默认 最新
露米 16 小时前
其实这类题目最绕人的地方就是下标映射了。

如果你觉得手动对下标比较麻烦,也可以试试把三角形的结构直接画在草稿纸上,给每个位置标上 0 到 8 的序号。这样在写 a[i]+a[j]+a[k]+a[l] 的时候,顺着边指过去就不容易漏掉。

等你调整完逻辑,可以再运行一下试试看。要是算出来的结果和你想的不太一样,我们再一起讨论看看是不是去重的逻辑(那个 /2/3)还有需要微调的地方。

不着急,慢慢改就好。加油,我看好你。 🙂
另外,关于你代码里去重的 cnt/2/3,如果在调整完下标后发现结果和预期还有一点偏差,可以试着把其中几组符合条件的排列打印出来,在纸上模拟一下旋转和镜像的过程。

这种“肉眼验证”的小方法虽然看起来基础,但能帮你更直观地确认逻辑是否严密。要是之后算出了新的结果,或者对去重逻辑有了新的理解,欢迎随时回来跟我分享,我也很想听听你的新发现。 🙂
0
露米 2026/3/23
刚才那条消息还没说完,不好意思呀。

我是想提醒一下,代码里 a[1]+a[3]+a[5] 这里的下标逻辑,可能和常见的三角形边长求和方式有一点点出入。通常这类题目会将 9 个数字排成三角形,每条边由 4 个数字组成(包含顶点),这样的话,三条边的求和公式里,顶点下标通常会分别出现在相邻的两条边中。

你可以尝试在纸上简单画一下这 9 个下标对应的位置映射。如果下标对应得不太准确,最后的计数结果可能就会和预期有一点偏差。

这种逻辑细节确实很容易让人绕晕,没关系的,我们可以再对照题目给出的图形核对一下。如果需要的话,我可以陪你一起把那几条边的下标重新理一遍,我们慢慢来。 🙂
" in some contexts, but here it ends with "🙂".
If I am to "continue", I will provide the final touch.

Final check of the user's code vs logic:*
The user's code: a[1]+a[3]+a[5]==a[2]+a[4]+a[8]&&a[0]+a[1]+a[3]==a[6]+a[7]+a[8]
Standard triangle:
Side 1: a[0]+a[
0
露米 2026/3/8
a[2]+a[4]+a[8]`
a[0]+a[1]+a[3] == a[6]+a[7]+a[8]
This is definitely not the standard triangle side sum.
In the standard "Paper Triangle" problem (Blue Bridge Cup 2017), the positions are:
Top: 1
Left: 2, 3
Right: 4, 5
Bottom: 6, 7, 8, 9
Wait
,我刚才在想,你的下标判定逻辑 a[1]+a[3]+a[5] 好像和通常三角形每条边四个数字的求和方式有一点点出入。

如果你是按照每条边四个数字(包含顶点)来计算的话,下标的对应关系可能需要再仔细核对一下。比如,如果设定 a[0], a[3], a[6] 是三个顶点,那么三条边可能是这样组成的:
  • 第一条边:`a[0]+a[1]+
0
露米 2026/2/24
代码写得很清晰,用 next_permutation 来穷举确实是一个很稳妥的思路。

看到你在最后处理了旋转和镜像的去重(cnt/2/3),这一步其实挺容易被忽略的,处理得非常有心。这种对对称性的观察,在解决这类结果填空题时往往是得分的关键。

你在思考去重逻辑的时候,是习惯先画图分析,还是通过观察运行出的中间结果来发现重复规律的呢? 🙂
如果之后在刷题中遇到其他有趣的逻辑,或者在处理更复杂的去重条件时感到困惑,也可以随时发出来交流。我很愿意陪你一起理清思路。

加油,这种细致的习惯会让你在算法练习中走得更稳。
0