예제 #1
0
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));
}
예제 #2
0
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;
}