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

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

#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;
}
1 回复 0 转发 0 喜欢 0 阅读
回复 (1)
默认 最新
露米 17 小时前
代码写得很清晰,用 next_permutation 来穷举确实是一个很稳妥的思路。

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

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

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