C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
Киро и Ацо со цел да извежбаат собирање ја играат следнава игра. Едниот од нив задава три цели броја (a, b и c). Задачата на другиот е преку конечен број на дозволени чекори со дозволени операции да стигне од броевите a и b до бројот c. Во секој чекор дозволени се следниве две операции, на бројот а да се додаде бројот b или на бројот b да се додаде бројот a. Проблемот со кој се соочуваат во секоја игра е дали воопшто може да се стигне до бројот c само со овие операции!
Input
Во еден ред се дадени три цели броја a, b и с. (0 ≤ а, b, c ≤ 1018)
Output
Во една линија се печати YES ако може да се стигне до бројот с или ако не може да се стигне се печати NO.
Constraints
Time limit: 3 секунди
Memory limit: 64 мегабајти
Ова ми звучи као рекурзија.. Во кој програмски јазик работиш?
 
Киро и Ацо со цел да извежбаат собирање ја играат следнава игра. Едниот од нив задава три цели броја (a, b и c). Задачата на другиот е преку конечен број на дозволени чекори со дозволени операции да стигне од броевите a и b до бројот c. Во секој чекор дозволени се следниве две операции, на бројот а да се додаде бројот b или на бројот b да се додаде бројот a. Проблемот со кој се соочуваат во секоја игра е дали воопшто може да се стигне до бројот c само со овие операции!
Input
Во еден ред се дадени три цели броја a, b и с. (0 ≤ а, b, c ≤ 1018)
Output
Во една линија се печати YES ако може да се стигне до бројот с или ако не може да се стигне се печати NO.
Constraints
Time limit: 3 секунди
Memory limit: 64 мегабајти
Имаш некои идеi или код кај што си пробал да го решиш?
 
Мислам дека ова е ок:
PHP:
// C# код, мали промени треба за да работи со C/C++
static void Main(string[] args)
        {
            bool test = solve(7,1, 1018);
            Console.WriteLine(test);
            Console.ReadLine();
        }

        static bool solve(int a, int b, int c)
        {
            if (c == a || c == b)
            {
                return true;
            }
            if (a > c || b > c)
            {
                return false;
            }

            return solve(a + b, b, c) || solve(a, b + a, c);
        }

Инаку за рекурзија, прво нешто што треба да направиш е да одредиш граници, кога знаеш дека има решение и нема. Потоа текстот вика дека може да се користат 2 операции само, што значи дека во дрвото што ќе се генерира ќе има 2 иницијални деца, првото е ако се случи операцијата "a +b" за А и вториот случај е "b+a" за B..што јасно се гледа од кодот.
 
Програмери ќе може ли некој да ми напише програма во која ќе се најдат парните броеви од 10 до 20 и збирот на тие броеви да изнесува 45 ..некако збуни ме оваа..благодарам однапред
 
Програмери ќе може ли некој да ми напише програма во која ќе се најдат парните броеви од 10 до 20 и збирот на тие броеви да изнесува 45 ..некако збуни ме оваа..благодарам однапред
Нема логика задачава. Збир на парни броеви НЕМОЖЕ да биде непарен број.
 
па така ми кажаа дека денеска имало на испит чудам се и јас како е можно пак ќе се распрашам ...
 
лесна е задачата, еден ред echo 'нема резултати' :)

Шала на страна, ако нешто нема резултат, незначи дека неможе да се реши преку код. Фино луп и проверка на парност на збировите и на крај, да ќе нема резултати ама ќе има напишан точен програмски код.
 
Наоѓаш парни броеви од 10-20 и нивен збир. После дали збирот е 45 или различно од тој број. На крај ќе печати дека збирот не е 45.
 
кога собериш збиро на парните броеви(10+12+14+16+18+20) испагја 90
да не е имало на крајот и збирот подели го со 2?
90/2 = 45
 
Имам проблем со една задача за програмирање од acm.timus.ru.

http://acm.timus.ru/problem.aspx?space=1&num=1093

Еве го мојот код:
Код:
#include <iostream>
#include <cmath>

using namespace std;

struct vector
{
    double x;
    double y;
    double z;
};


double dist(vector a, vector b)
{
    double d = sqrt(pow(b.x - a.x, 2) + pow(b.y - a.y, 2) + pow(b.z - a.z, 2));
    return d;
}

double find_d(vector v_normal, vector point)
{
    double minus_d = v_normal.x*point.x + v_normal.y * point.y + v_normal.z * point.z;
    return -minus_d;
}

int main(int argc, char * argv[])
{
    vector C, N, S, V;
    double R;
    cin >> C.x >> C.y >> C.z;
    cin >> N.x >> N.y >> N.z;
    cin >> R;
    cin >> S.x >> S.y >> S.z;
    cin >> V.x >> V.y >> V.z;
    double t1, t2;
    double D = find_d(N, C);

    t1 = (double)(N.x * V.x + N.y * V.y + N.z * V.z - sqrt(20 * N.z * (D + N.x * S.x + N.y * S.y + N.z * S.z) + pow(N.x*V.x+N.y*V.y + N.z*V.z, 2))) / (double)(10.0*N.z);
    t2 = (double)(N.x * V.x + N.y * V.y + N.z * V.z + sqrt(20 * N.z * (D + N.x * S.x + N.y * S.y + N.z * S.z) + pow(N.x*V.x + N.y*V.y + N.z*V.z, 2))) / (double)(10.0 * N.z);

    vector hit1, hit2;
    hit1.x = S.x + t1*V.x;
    hit1.y = S.y + t1*V.y;
    hit1.z = S.z + t1*V.z - 5*t1*t1;

    hit2.x = S.x + t2*V.x;
    hit2.y = S.y + t2*V.y;
    hit2.z = S.z + t2*V.z - 5 * t2*t2;

    if (t1 >= 0)
    {
        if (dist(hit1, C) <= R)
        {
            cout << "HIT";
            return 0;
        }
    }

    if (t2 >= 0)
    {
        if (dist(hit2, C) <= R)
        {
            cout << "HIT";
            return 0;
        }
    }
    cout << "MISSED";
    return 0;
}
 
Ќе може да ми помогнете со овие 2 задачи, навистина не ги разбирам покажувачите а камо ли да решавам задачи .. :(:(
1. Да се направи програма која брои од 0 до 9 и ги печати броевите на екран. Да се отпечатат броевите користејќи покажувачи .
2.да се направи програма која чита низа и бара интервал. Ако најде таков го печати остатокот од низата.
 
Ќе може да ми помогнете со овие 2 задачи, навистина не ги разбирам покажувачите а камо ли да решавам задачи .. :(:(
1. Да се направи програма која брои од 0 до 9 и ги печати броевите на екран. Да се отпечатат броевите користејќи покажувачи .
2.да се направи програма која чита низа и бара интервал. Ако најде таков го печати остатокот од низата.
Од на училиште се задачиве?
 
1.
Код:
#include <iostream>

using namespace std;

int main()
{
    int i; //deklariranje brojac
    int *p; //deklariranje pokazuvac
    p=&i; //p dobiva adresa od i bidejki p e pokazuvac
    for(i=0;i<10;i++){ //for ciklus za vrtenje od 0 do 9
        cout<<*p<<endl;
    }
    return 0;
}
А втората не ја сфаќам(не е убаво објаснета)
 

Kajgana Shop

Back
На врв Bottom