Заколдованный принц: даны длины сторон, построить треугольник с наибольшим периметром - 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д