Skip to content

三角形求和问题 #4

Open
Open
@65316571

Description

@65316571

题目:
给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。

例如:
输入[2,1,1] 输出0;
输入[2,3,4] 输出9;

解题思路:
贪心算法:先将给出的数经过排序,再从大到小开始判断,若满足条件则退出

正常做法:把每次判断三个不重复的数,遍历全部可能在再根据条件i退出

具体算法:
贪心算法:
#include<stdio.h>
//木棍拼三角问题
int n;

int enter(int k[])//输入
{
printf("输入木根个数与具体的木棍长度\n");
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&k[i]);
}

int Sort(int k[])//大到小排序
{
for(int i=0;i<n;i++)
for(int l=i+1;l<n;l++)
if(k[i]<k[l])
{k[i]=k[l]^k[i];k[l]=k[l]^k[i];k[i]=k[l]^k[i];}
}

int algorithm(int k[])//核心算法
{
int m=0;
for(int i=0;i+2<n;i++)
if(k[i]<k[i+1]+k[i+2]) {m=k[0]+k[1]+k[2];printf("\n%d\n",m);return 0;}
printf("\n0\n");
}

int main()
{
int k[n];
enter(k);
Sort(k);
algorithm(k);
}

正常法:
#include<stdio.h>
#define max(a,b) ( ((a)>(b)) ? (a):(b) )
#define min(a,b) ( ((a)>(b)) ? (b):(a) )
int main()
{
int q,k[q],z=0;
int A,B,C;
scanf("%d",&q);
for(int i=0;i<q;i++)
scanf("%d",&k[i]);

for(int a=0;a<q;a++)
	for(int b=a+1;b<q;b++)
		for(int c=a+2;c<q;c++)
		if(k[a]==0||k[b]==0||k[c]==0||k[a]==k[b]||k[a]==k[c]||k[b]==k[c])
		continue;
		else
	{A=k[a]+k[b]+k[c];
	B=max(max(k[a],k[b]),k[c]);
	C=A-B;	
	if(C>B)	if(A>z)	z=A;}
printf("",A);
printf("\n%d",z);

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions