eMatematikas Prisijunk Forumas Matematikos testai Pradžia

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


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;
}

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.

pakeista prieš 3 m

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »