前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法:7-2 最大三角形

算法:7-2 最大三角形

作者头像
小颜同学
发布2023-08-24 08:19:30
1860
发布2023-08-24 08:19:30
举报
文章被收录于专栏:原创笔记原创笔记

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

输入格式:

在一行中给出小棍的个数 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("最大三角形的周长是%d\n组成最大三角形的三条边是%d,%d,%d", arr[i] + arr[i-1] + arr[i-2], arr[i-2], arr[i-1], arr[i]);
        break;
   }
  }
 }
 return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入格式:
  • 输出格式:
  • 输入样例1:
  • 输出样例1:
  • 输入样例2:
  • 输出样例2:
  • 输入样例3:
  • 输出样例3:
  • 代码演示:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档