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