eMatematikas Registruotis Ieškoti

Informatikos egzaminas. 1 užduotis. Gėlės

Informatika   Peržiūrų skaičius (170)

Sveiki.
Ar galima supaprastinti šį sprendimą?

#include <fstream>
using namespace std;
int didziausias(int dienos[]){
    int vieta{1};
    for(int i{2};i<93;i++){
        if(dienos[i]>dienos[vieta])
            vieta=i;
    }
    return vieta;
}
int pabaiga(int dienos[]){
    for(int i=didziausias(dienos);i<93;i++){
        if(dienos[i]<dienos[didziausias(dienos)]){
            return i;
        }
    }
}
int main(){
    ifstream fin("U1.txt");
    ofstream fout("U1rez.txt");
    int dienos[93]={}, n, m1, d1, m2, d2, prad, pab, nr, menuo;
    fin >> n;
    for(int i{}; i < n; i++){
        fin >> nr >> m1 >> d1 >> m2 >> d2;
        if(m1 == 7) prad=30;
        else if(m1==8) prad=61;
        else prad=0;
        if(m2 == 7) pab=30;
        else if(m2==8) pab=61;
        else pab=0;
        for(int i{prad+d1}; i < pab+d2; i++){
            dienos[i]++;
        }
    }
    fout<<dienos[didziausias(dienos)]<<"\n";
    menuo=didziausias(dienos)/31+6;
    fout<<menuo<< " ";
    if(menuo==6)fout<<didziausias(dienos)<<"\n";
    else if(menuo==7)fout<<didziausias(dienos)-30<<"\n";
    else fout<<didziausias(dienos)-61<<"\n";
    menuo=pabaiga(dienos)/31+6;
    fout<<menuo<<" ";
    if(menuo==6)fout<<pabaiga(dienos)<<"\n";
    else if(menuo==7)fout<<pabaiga(dienos)-30<<"\n";
    else fout<<pabaiga(dienos)-61<<"\n";
    fout.close();
    fin.close();
    return 0;
}

0

https://www.ematematikas.lt/forumas/informatikos-vbe-2020-programa-uzduotis-1-geles-t14412.html

Jau buvo tokia tema. Bet dar pridesiu savo sprendima:

#include <bits/stdc++.h>
using namespace std;

int diena[3] = {0,30,61};
ifstream fd("U1.txt");
ofstream fr("U1rez.txt");

int rastiPradzia(int zydi[]){
    int p = 0;
    for (int i = 1; i<=92; i++){
        if(zydi[i]>zydi[p]){
            p = i;
        }
    }
    return p;
}
void ats(int d){
    if(d<=30){
        fr << 6 << " " << d;
    }
    else if(d<=61){
        fr << 7 << " " << d-30;
    }
    else{
        fr << 8 << " " << d-61;
    }
}
int main(){
    int n; fd >> n;
    int zydi[100] = {0};
    for (int i = 0; i<n; i++){
        int m1,d1,m2,d2;
        fd >> m1/*nr jo nereikia*/ >> m1 >> d1 >> m2 >> d2;
        for (int j = diena[m1-6]+d1; j<=diena[m2-6]+d2; j++){
            zydi[j]++;
        }
    }

    int pradzia = rastiPradzia(zydi);
    int pabaiga = pradzia;
    while(zydi[pradzia]==zydi[pabaiga+1] and pabaiga+1<=92){
        pabaiga++;
    }

    fr << zydi[pradzia] << endl;
    ats(pradzia);
    fr << endl;
    ats(pabaiga);

    fd.close();
    fr.close();
    return 0;
}


Ka kitaip daryt nelabai yra, nebent intervalai butu po milijonus dienu ir ju butu tukstanciai tai su for prideti prie kiekvieno po viena ilgai uztruktu, tai tada reiketu intervalo pradzia pasizymeti kaip +1, o pabaiga -1 ir tada ieskoti ko reikia, bet egzaminuose to tikrai nebus.

Paskutinį kartą atnaujinta 2021-03-13

0

Norėdami rašyti žinutes privalote prisijungti!

Matematikos testai www.ematematikas.lt/testai Pasikartok matematikos temas spręsdamas online testus!