算法:7-2 最大三角形

算法:7-2 最大三角形

小颜同学 Lv4

有一个游戏,玩法是在一堆长度不一的小棍中找出三根棍子,拼出一个周长最大的三角形。有什么策略能快速的找到三根小棍么?
请你来试试吧

输入格式:

在一行中给出小棍的个数 N,另一行中分别给出 N 个小棍的长度,之间用空格隔开。

输出格式:

如果小棍的数量小于 3,则输出小棍的个数不能组成三角形;如果找到最大的三角形,则输出最大三角形的周长是?,并在下一行中输出组成最大三角形的三条边是?,?,?,三条边之间用英文逗号隔开并从小到大输出;如果没有找到,则输出没有找到能组成三角形的小棍

输入样例1:

1
2
10
233 120 747 75 67 336 221 845 780 403

输出样例1:

1
2
最大三角形的周长是2372
组成最大三角形的三条边是747,780,845

输入样例2:

1
2
2
15 12

输出样例2:

1
小棍的个数不能组成三角形

输入样例3:

1
2
3
15 12 3

输出样例3:

1
没有找到能组成三角形的小棍
1
2
3
代码长度限制										16 KB
时间限制 30 ms
内存限制 64 MB

代码演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.Arrays;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n<3){
System.out.println("小棍的个数不能组成三角形");
}
Scanner sc1 = new Scanner(System.in);
String sr = sc1.nextLine();
String arr1[] = sr.split(" ");
int arr[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(arr1[i]);
}
getLongestTriangle(arr);
}
public static int getLongestTriangle(int[] arr) {
if (arr == null || arr.length < 3) {
return 0;
}
Arrays.sort(arr);

for (int i = arr.length - 1; i >= 2; i--) {
int longEdge = arr[i];
int midEdge = arr[i - 1];
int shortEdge = arr[i - 2];
if (midEdge + shortEdge > longEdge) {
System.out.print("最大三角形的周长是");
System.out.println(midEdge+shortEdge+longEdge);
System.out.println("组成最大三角形的三条边是"+shortEdge+","+midEdge+","+longEdge);
return longEdge + midEdge + shortEdge;
}else if ((!(midEdge + shortEdge > longEdge))){
System.out.println("没有找到能组成三角形的小棍");
}
}
return 0;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<stdio.h>
int main(){
int n = 0;
if(scanf("%d",&n)){}
int arr[n];
int i = 0;
for(;i<n;i++){
if(scanf("%d",&arr[i])){}
}
if(n<3){
printf("小棍的个数不能组成三角形\n");
return 0;
}else{
for(i=1;i<n;i++){
int j = i-1;
int t = arr[i];
while(j >= 0 && arr[j] > t){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = t;
}

for(i=n-1; i>=0; i--) {
if(i<n-3) {
printf("没有找到能组成三角形的小棍");
break;
}
if(arr[i-1]+arr[i-2]>arr[i]) {
printf("最大三角形的周长是%d\n组成最大三角形的三条边是%d,%d,%d", arr[i] + arr[i-1] + arr[i-2], arr[i-2], arr[i-1], arr[i]);
break;
}
}
}
return 0;
}
  • 标题: 算法:7-2 最大三角形
  • 作者: 小颜同学
  • 创建于: 2022-10-19 13:24:38
  • 更新于: 2023-12-18 09:06:28
  • 链接: https://www.wy-studio.cn/2022/10/19/算法:7-2-最大三角形/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论