等边三角形

蒜头君手上有一些小木棍,它们长短不一,蒜头君想用这些木棍拼出一个等边三角形,并且每根木棍都要用到。例如, 蒜头君手上有长度为1, 2, 3, 3的4根木棍,他可以让长度为1,2的木棍组成一条边,另外2跟分别组成2条边,拼成一个边长为3的等边三角形。蒜头君希望你提前告诉他能不能拼出来,免得白费功夫。

输入格式

首先输入一个整数n(3 < n < 10),表示木棍数量,接下来输入n根木棍的长度pi(1 <Pi < 10000)。

输出格式

如果蒜头君能拼出等边三角形,输出"yes",否则输出"no"。


#include<iostream>
using namespace std;
int n;
int a[15];
bool vis[15];
bool f;
int sum = 0;
void dfs(int cnt, int s)
{
	if (cnt == 3)
	{
		f = true;
		return;
	}
	if (s == sum / 3)
	{
		dfs(cnt + 1, 0);
		return;
	}
	for (int i = 0; i < n; i++)
	{
		if (!vis[i])
		{
			vis[i] = true;
			dfs(cnt + 1, s + a[i]);
			vis[i] = false;
		}
	}
}
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		sum += a[i];
	}
	dfs(0, 0);
	if (sum % 3 != 0)
	{
		cout << "no";
	} 
	else
	{
		dfs(0, 0);
		if (f)
		{
			cout << "yes";
		}
	}
	return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值