1

Тема: Розрахункова. Масиви

Я не програмер, але в мене є такий предмет як програмування і з нього є розрахункова. Хто небудь допоможіть!

Задані дійсні числа a1, b1, a2, b2, . . . , a24, b24. (ai < bi). Розглядаючи пари ai і bi як ліві і праві кінці відрізків на тій самій прямій, визначити кінці відрізка, який є перетином всіх цих відрізків. Якщо такого відрізка нема, то
повідомити про це.

2

Re: Розрахункова. Масиви

Який бюджет?

модерам

Перенесіть будь-ласка до розділу "пропоную роботу"

3 Востаннє редагувалося Ярослав (13.12.2014 15:10:53)

Re: Розрахункова. Масиви

Цю задачу можна вирішити так:
Треба знайти відрізок, у якого ліва координата найбільша від усіх інших відрізків.
Треба зауважити випадки, в яких ліві координати відрізків збігаються.
Після того треба порівняти чи права координата знайденого відрізка менша чи дорівнює всім правих координатам всіх інших відрізків.
Код

/* 
 * File:   main.cpp
 * Author: yaroslav
 *
 * Created on December 13, 2014, 10:24 AM
 */

#include <cstdlib>
#include <iostream>

using namespace std;

struct segment{
    float left;
    float right;
};

/*
 * Finding the line segment that is within each specified line segment
 */
int main(int argc, char** argv) {
    int     i, j;       // counters
    int     segnum;     // number of line segments    
    float   length;     // length of line
    int     currseg;    // Line segment with the largest left value
    
    cout << "line_segment\n";
    
    do {
        cout << "Input line segment length (1-100): ";
        cin >> length;
    } while (length < 1.0 || length > 100.0);
    
    do {
        cout << "Input number of segments (2-20): ";
        cin >> segnum;
    } while (segnum < 2 || segnum > 20);
    segment segarray[segnum];
    
    cout << "Input point coordinates in the range of 0 to " << length << "\n";
    for (i = 0; i < segnum; i++) {
        cout << "Segment #" << i+1 << ":\n";
        do {
            cout << "x1=";
            cin >> segarray[i].left;
        } while (segarray[i].left < 0 || segarray[i].left > length);
        
        do {
            cout << "x2=";
            cin >> segarray[i].right;
        } while (segarray[i].right < 0 || segarray[i].right > length 
                || segarray[i].right < segarray[i].left);
    }
    
    currseg = 0;
    for (i = 1; i < segnum; i++) {
        if (segarray[currseg].left < segarray[i].left) {
            currseg = i;    // looking for line segment with largest left value
        } else if (segarray[currseg].left == segarray[i].left) {
            if (segarray[currseg].right >= segarray[i].right) {
                currseg = i;
            }
        }
    }
    for (i = 0, j = 0; i < segnum; i++) {
        if (segarray[currseg].right <= segarray[i].right) {
            j++;    // counting segments on the line with greater right value
        }
    }
    if (j == segnum) {
        cout << "Line segment with coordinates x1=" << segarray[currseg].left;
        cout << " x2=" << segarray[currseg].right << " is inside all other\n";
    } else {
        cout << "No segment of the line that is inside all other\n";
    }
    
    return 0;
}

4

Re: Розрахункова. Масиви

Прихований текст

https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/10609519_714967968539396_7229940754852570713_n.jpg?oh=725c323a4307cec33d9cee8470e11c35&amp;oe=551187B1&amp;__gda__=1426468361_b9ac55bb223591ae7154ace35eb0b838

А взагалі

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int left, right;
    cin >> left >> right;
    for( int i = 0; i < 23; ++i )
    {
        int newLeft, newRight;
        cin >> newLeft >> newRight;
        left  = max( left,  newLeft  );
        right = min( right, newRight );
    }
    if( right <= left )
        cout << "No intersection";
    else
        cout << left << " : " << right;
    return 0;
}

5

Re: Розрахункова. Масиви

koala, ви часом не захворіли? Що це ви отак берете і пишете код людині без нічого? На вас це не схоже.

6

Re: Розрахункова. Масиви

quez написав:

koala, ви часом не захворіли? Що це ви отак берете і пишете код людині без нічого? На вас це не схоже.

Та вже є відповідь, я тільки оптимізую. Ви краще ось це подивіться :)