int longestIncreasingSubsequence(std::vector<int> vect, int start, int end){ if(start == end) return 1; int middle = (start + end) / 2; std::vector<int> left; std::vector<int> right; for(int i = 0; i <= middle - start; i++) left.push_back(vect[i]); for(int i = middle - start + 1; i <= end - start; i++) right.push_back(vect[i]); int leftSide = longestIncreasingSubsequence(left, start, middle); int rightSide = longestIncreasingSubsequence(right, middle + 1, end); return maxOfThree(leftSide, rightSide, middleOut(left, right)); }
int similarTriangles(){ double a, b, c; printf("a = "); scanf("%lf", &a); printf("b = "); scanf("%lf", &b); printf("c = "); scanf("%lf", &c); if ((a > 0) && (b > 0) && (c > 0) && (a + b > c) && (a + c > b) && (b + c > a)){ printf("Треугольник 1 существует\n"); } else { printf("Треугольника 1 не существует\n"); return -1; } double a1, b1, c1; printf("a1 = "); scanf("%lf", &a1); printf("b1 = "); scanf("%lf", &b1); printf("c1 = "); scanf("%lf", &c1); if ((a1 > 0) && (b1 > 0) && (c1 > 0) && (a1 + b1 > c1) && (a1 + c1 > b1) && (b1 + c1 > a1)){ printf("Треугольник 2 существует\n"); } else { printf("Треугольника 2 не существует\n"); return -1; } double max1 = maxOfThree(a, b, c); double max2 = maxOfThree(a1, b1, c1); double koeff = max1/max2; double min1 = minOfThree(a, b, c); double min2 = minOfThree(a1, b1, c1); int isOk = 1; if (min1 / min2 != koeff){ printf("треугольники не подобные\n"); isOk = 0; return -1; } double avg1 = AvgOfThree(a, b, c); double avg2 = AvgOfThree(a1, b1, c1); if (avg1 / avg2 != koeff){ printf("треугольники не подобные\n"); isOk = 0; return -1; } if (isOk = !0){ printf("треугольники подобные\n"); } return 0; }