Заколдованный принц: даны длины сторон, построить треугольник с наибольшим периметром - C (СИ)
Формулировка задачи:
Принц нашел 4 волшебных палочки длины которых a, b, c, d. Ему требуется построить треугольник с наибольшим периметром.
Задача: определть из каких палочек(т.е. какой длины) принц должен построить треугольник
Ввод данных с клавиатуры вводятся 4 положительных числа через пробел a, b, c ,d которые обозначают длины палочек
Вывод на экран длин палочек из которых можно постройть треугольник с максимальным периметром в алфавитном порядке перечисления их длин через пробел. Если треугольник нельзя построить то вывести сообщение "NO"
Решение задачи: «Заколдованный принц: даны длины сторон, построить треугольник с наибольшим периметром»
textual
Листинг программы
#include<stdio.h>
struct STICK
{ int length;
char name;
}s[4];
struct TRIANGLE
{ STICK side[3];
int perimeter;
}tr[4];
void create(STICK x, STICK y, STICK z, int num)
{ int i;
tr[num].side[0]=x;
tr[num].side[1]=y;
tr[num].side[2]=z;
tr[num].perimeter = 0;
if((x.length+y.length)>z.length && (y.length+z.length)>x.length && (x.length+z.length)>y.length)
tr[num].perimeter=x.length+y.length+z.length;
printf("\n\nTriangle %d",num);
for(i=0;i<3;i++)
printf("\nstick %c, length %d", tr[num].side[i].name, tr[num].side[i].length);
printf("\nperimeter %d",tr[num].perimeter);
}
int main()
{ int i,cur,max;
char j;
for(i=0,j ='a'; i<4; i++,j++)
{ printf("%c = ",j);
scanf("%d",&cur);
s[i].length = cur;
s[i].name = j;
}
printf("\nPossible triangles:");
create(s[0],s[1],s[2],0);
create(s[0],s[2],s[3],1);
create(s[1],s[2],s[3],2);
create(s[0],s[1],s[3],3);
for(i=0, max=0; i<4; i++)
if(tr[i].perimeter>max)
{ max = tr[i].perimeter;
cur = i;
}
if(!max)
printf("\n\nNo triangles");
else
{ printf("\n\nTriangle created by:");
for(i=0;i<3;i++)
printf("\nstick %c, length %d", tr[cur].side[i].name, tr[cur].side[i].length);
printf("\nhas maximum perimeter %d",tr[cur].perimeter);
}
flushall();
getchar();
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены две структуры:
STICKиTRIANGLE.STICKсодержит длину и имяstick.TRIANGLEсодержит массивsideиз трех элементов типаSTICKи переменнуюperimeter.
- Определена функция
create, которая создает треугольник с заданными сторонами и вычисляет его периметр.- Если треугольник существует (все стороны не равны нулю и выполняется условие из задачи), то вычисляется и записывается его периметр.
- Выводится информация о созданном треугольнике.
- В функции
mainобъявлены четыреSTICKс именами от 'a' до 'd' и переменнаяcurдля чтения длиныstick.- С помощью цикла и функции
scanfсчитываются длины всехstick. - Выводится сообщение о возможных треугольниках.
- С помощью вложенного цикла и функции
createсоздаются все возможные треугольники. - С помощью цикла и условного оператора определяется треугольник с максимальным периметром.
- Выводится информация об этом треугольнике.
- С помощью цикла и функции
- В конце программы используется функция
flushallдля очистки буфера ввода-вывода иgetcharдля ожидания нажатия клавиши.- Возвращается 0, что означает успешное выполнение программы.