问题 3891 --神奇的三角形(triangle.cpp)

3891: 神奇的三角形(triangle.cpp)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 22  解决: 14
[提交][状态][命题人:]

题目描述

三角形是由同一平面内不在同一直线上的三条线段首尾顺次连接所组成的封闭图形。在数学,建筑学上都有应用。

三角形有个特性,就是三角形的两条边的和大于第三条边。也就是说,如果有任意两条边的和小于等于第三条边,那么这三条边就无法构成三角形。

现在有n条长度为整数的边,请你输出哪三条边可以构成三角形。

#include<bits/stdc++.h>
using namespace std;
//注意:本程序所有下标均以0开始
int n;
int arr[100];
int ans[3];
long long cnt=0;
void DFS(int t,int c){
	if(t>=3){//递归终止条件
		if(____(1)____){//满足三角形的构成
			for(int i=0;i<3;i++)
				printf("%d ",ans[i]);//输出
			printf("\n");
			cnt++;
		}
		return;
	}
	for(int i=c;____(2)____;i++){
		ans[t]=____(3)____;
		DFS(t+1,____(4)____);//递归
	}
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++) cin>>arr[i];//输入
	sort(____(5)____);//从小到大排序
	____(6)____//调用DFS
	cout<<cnt;
} 


输入

输入文件为triangle.in

第一行输入一个整数n,然后第二行输入n个不重复整数(没有排序)

输出

输出文件为triangle.out

按照字典序输出所有能够组成三角形的三条边的长度,最后一行输出能够组成三角形的个数

样例输入
Copy
5
2 4 1 5 3
样例输出
Copy
2 3 4
2 4 5
3 4 5
3

提示

只要较小的两条边大于最长的那条边,那么这三条边就能构成三角形。

来源

[提交][状态]