有一个游戏,玩法是在一堆长度不一的小棍中找出三根棍子,拼出一个周长最大的三角形。有什么策略能快速的找到三根小棍么? 请你来试试吧
输入格式:
在一行中给出小棍的个数 N,另一行中分别给出 N 个小棍的长度,之间用空格隔开。
输出格式:
如果小棍的数量小于 3,则输出小棍的个数不能组成三角形
;如果找到最大的三角形,则输出最大三角形的周长是?
,并在下一行中输出组成最大三角形的三条边是?,?,?
,三条边之间用英文逗号隔开并从小到大输出;如果没有找到,则输出没有找到能组成三角形的小棍
。
输入样例1:
代码语言:javascript复制10
233 120 747 75 67 336 221 845 780 403
输出样例1:
代码语言:javascript复制最大三角形的周长是2372
组成最大三角形的三条边是747,780,845
输入样例2:
代码语言:javascript复制2
15 12
输出样例2:
代码语言:javascript复制小棍的个数不能组成三角形
输入样例3:
代码语言:javascript复制3
15 12 3
输出样例3:
代码语言:javascript复制没有找到能组成三角形的小棍
代码语言:javascript复制代码长度限制 16 KB
时间限制 30 ms
内存限制 64 MB
代码演示:
代码语言:javascript复制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;
}
}
代码语言:javascript复制#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("最大三角形的周长是%dn组成最大三角形的三条边是%d,%d,%d", arr[i] arr[i-1] arr[i-2], arr[i-2], arr[i-1], arr[i]);
break;
}
}
}
return 0;
}