有一个游戏,玩法是在一堆长度不一的小棍中找出三根棍子,拼出一个周长最大的三角形。有什么策略能快速的找到三根小棍么?
输入格式:
在一行中给出小棍的个数 N,另一行中分别给出 N 个小棍的长度,之间用空格隔开。
输出格式:
如果小棍的数量小于 3,则输出小棍的个数不能组成三角形;如果找到最大的三角形,则输出最大三角形的周长是?,并在下一行中输出组成最大三角形的三条边是?,?,?,三条边之间用英文逗号隔开并从小到大输出;如果没有找到,则输出没有找到能组成三角形的小棍。
#include <stdio.h> #include <malloc.h> void main() { int len; int *mLength; scanf("%d", &len); if(len<3) { printf("小棍的个数不能组成三角形"); return; } mLength = (int *)malloc(len * sizeof(int)); for (int i = 0; i < len; i++) { scanf("%d", &mLength[i]); } Sort(mLength,len); Select(mLength,len); } void Select(int *mLength,int len) { int j,k; int sum =0; for(int i = 0;i <len ;i++) { for(j = i +1;j < len;j++) { for(k=j+1;k <len; k++) { if(mLength[i] + mLength[j] > mLength[k] && mLength[i] - mLength[j] < mLength[k]) { sum = mLength[i] + mLength[j]+mLength[k]; printf("最大三角形的周长是%d\n",sum); printf("组成最大三角形的三条边是%d,%d,%d",mLength[k],mLength[j],mLength[i]); return; } } } } if(sum == 0 ) { printf("没有找到能组成三角形的小棍"); } } void Sort(int *mLength, int len) { int j,temp; int max = 0; for (int i = 0; i < len; i++) { max = i; for (j = i + 1; j < len; j++) { if (mLength[j] > mLength[max]) { max = j; } } if(i != max) { temp = mLength[i]; mLength[i] = mLength[max]; mLength[max] = temp; } } }