Programmer234

Olimpiadinis programavimo u┼żdavinys (C++)

Recommended Posts

Reikia pagalbos su olimpiadiniu u┼żdaviniu. Para┼íiau dal─» kodo, bet nesugalvoju pagrindinio algoritmo.┬á Mane ┼íiek tiek painioja s─ůlygos sakinys "Jei kuriam nors ┼żaid─Śjui yra pasirinkimas, tai visi ┼żaid─Śjai vertina situacij─ů atsi┼żvelgdami ─» ┼íio ┼żaid─Śjo galim─ů ─Śjim─ů.".┬á

S─ůlyga (2 u┼żdavinys, ┼żaidimas):

https://forumas.ktu.lt/index.php/uzduociu-archyvas/2019-metu-konkursu-uzduotys/132-2019-programavimas-forumas/file

Kodas:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

class Cordinates
{
public:
    int x;
    int y;
};
void Read(int& n, int& m, std::vector<Cordinates>& player,
    std::vector<Cordinates>& chair);
void Distance(const std::vector<Cordinates>& player,
    const std::vector<Cordinates>& chair,
    std::vector<std::vector<unsigned int>>& distances);

int main()
{
    int n, m;
    std::vector<Cordinates> player;
    std::vector<Cordinates> chair;
    std::vector<std::vector<unsigned int>> distances;
    Read(n, m, player, chair);
    Distance(player, chair, distances);

    return 0;
}

void Read(int &n, int &m, std::vector<Cordinates>& player,
    std::vector<Cordinates>& chair)
{
    std::ifstream fin("U2.txt");
    fin >> n >> m;
    std::string line;
    for (int y = 0; y < n; y++)
    {
        fin >> std::ws;
        std::getline(fin, line);
        for (int x = 0; x < m; x++)
        {
            if (line[x] == 'X') 
                player.push_back({ x, y });
            else if (line[x] == 'L') 
                chair.push_back({ x, y });
        }
    }
    fin.close();
}

void Distance(const std::vector<Cordinates>& player,
    const std::vector<Cordinates>& chair,
    std::vector<std::vector<unsigned int>>& distances)
{
    for (int i = 0; i < chair.size(); i++)
    {
        std::vector<unsigned int> temp;
        for (int j = 0; j < player.size(); j++)
        {
            temp.push_back(abs(player[j].x - chair[i].x) + abs(player[j].y - chair[i].y));
        }
        distances.push_back(temp);
    }
}

 

Redaguota , nario Programmer234
Nuoroda iki šio pranešimo
Dalintis per kit─ů puslap─»

Prisijungti prie diskusijos

Palikti atsakym─ů galite i┼í karto, o u┼żsiregistruoti v─Śliau. Jeigu jau turite paskyr─ů m┼źs┼│ forume, Prisijunkite.

Sve─Źias
Atsakyti šioje temoje...

×   ─«klijuotas tekstas turi teksto formatavim─ů.   Pa┼íalinti teksto formatavim─ů

  Galimi tik 75 veidukai.

×   Nuoroda buvo automati┼íkai ─»terpta.   ─«terpti nuorod─ů paprastai

×   J┼źs┼│ ankstesnis prane┼íimas buvo atkurtas.   I┼ívalyti redaktori┼│

×   J┼źs negalite ─»kelti nuotraukas tiesiogiai.─«kelkite arba ─»d─Śkite nuotraukas i┼í URL.


  • Temos, kurios buvo pa┼żym─Śtos tomis pa─Źiomis ┼żym─Śmis:

    • Para┼í─Ś silverfoxas
      Sveiki, i┼íkilo problema spren┼żiant u┼żdavin─», kuriame reikia ┼íalinti masyvo narius ir suformuoti nauj─ů masyvo sara┼í─ů.┬á

      sunkiausia yra parasyt ta formavimo funkcija, nors vistiek atsakymai gaunasi blogai kad ir kaip beparasyciau
      Mano sprendimas
      #include <iostream>
      #include <iomanip>
      #include <fstream>
      #include <cmath>
      using namespace std;
      const char SF [] = "Duomenys.txt";
      const char RF [] = "Rezultatai.txt";
      void skaitymas (const char SF[], int &n, int A[], int B[]);
      void salinti (int A[], int B[],int &n);
      void salinti2 (int A[], int B[],int &n);
      void formavimas (int &n, int A[],int B[],int &k);
      void atsakymai (const char RF[], int A[], int n);
      int main()
      {
          int n; /// zibintu skaicius;
          int A[100], B[100]; /// zibintu numeriu masyvai ir zibintu busenu masyvai
          int k;
          ofstream rf(RF);
          skaitymas (SF,n,A,B);
          salinti (A,B,n);
          atsakymai (RF,A,n);
          salinti2 (A,B,n);
          formavimas (n,A,B,k);
          atsakymai(RF,A,n);

          return 0;
      }
      void skaitymas (const char SF[], int &n, int A[], int B[])
      {
          ifstream sf (SF);
          sf >> n;
          for (int i=0; i<n; i++)
          sf >> A >> B;
          sf.close();
      }
      void salinti(int A[], int B[],int &n)
      {
          for (int i=0; i<n; i++) {
          if (B   == 0)
          {
              for (int k=i; k<n; k++)
                  B[k]=B[k+1];
                  A[k]=A[k+1];
              n--;i--;
          }
      } }
      void salinti2 (int A[], int B[],int &n)
      {
          for (int i=0; i<n; i++) {
          if (B   == 1)
          {
              for (int k=i; k<n; k++)
                  B[k]=B[k+1];
                  A[k]=A[k+1];
              n--;i--;
          }
      } }
       
      void atsakymai (const char RF[], int A[], int n)
      {
          ofstream rf (RF, ios::app);
          for (int i=0; i<n; i++)
          rf << A << " ";
          rf << endl;
      }
      Buciau dekingas jei patartumet kaip issprest
    • Para┼í─Ś #Dziastin#
      Sveiki,
      nor─Ś─Źiau paklausti i┼í kur geriausiai prad─Śti dom─Śtis C++ programavimo kalba?
      Patikslintas pra┼íymas: galb┼źt gal─Śtum─Śte pasakyti "tutorial" puslapi┼│, grupi┼│ ir pn┼í? Kad b┼źt┼│ galima mokintis / dom─Śtis nuo 0.
      A─Źi┼ź
    • Para┼í─Ś Gasolinis
      Sveiki, galb┼źt atsiras norintis prisiminti 11 klas─Śs kurs─ů ir i┼íspr─Östi vien─ů u┼żdavin─», kuris asmeni┼íkai man yra ne─»veikiamas. Atlygio nesi┼źlau jokio, pikt┼│ komentar┼│ irgi nelaukiu. Tad gal ka┼żkam nesunku ir pagelb─Śtumete ir padaryt┼│ ka┼żkas pilnai nuo a iki z ┼íit─ů u┼żdavin─» ir pasidalint┼│ sprendimu, a─Źi┼ź.
      Tekstiniame faile duom.txt ─»ra┼íytas skai─Źius n ir n sveik┼│j┼│ skai─Źi┼│ por┼│,
      kurios rei┼íkia sta─Źiakampio matmenis a ir b.
      Sukurkite funkcij─ů sta─Źiakampio plotui S ir perimetrui p apskai─Źiuoti.
      Rezultatus i┼íveskite ─» fail─ů rez.txt
       
      Buvo ikeltas ir ┼íioks toks pavizdys, ta─Źiau kitos u┼żduoties. - https://imgur.com/a/9QyWiVS
       
       
    • Para┼í─Ś BloodLust
      Sveiki gal kas ras klaida suvedes lyg viska ir gerai bet atsakyma ne toki spausdina
      #include <iostream>
      #include <iomanip>
      using namespace std;
      int main()
      {
          int a,b;
          cin>>a>>b;
          for(int x=a; x>=b; x++){
              if(x<=3 && x%5  ==0 && x%10<=5) cout<<x<<endl;
          }
          return 0;
      }    
       

  • ┼áiame puslapyje nar┼ío:   0 nariai

    N─Śra registruot┼│ nari┼│ per┼żi┼źrin─Źi┼│ ┼í─» forum─ů.