Pereiti prie turinio

Spalvotos korteles c++


Rekomenduojami pranešimai

manau, taip galima. Papildomai dar atsakymo sekas surikiuot reikia ^_^

 

http://i62.tinypic.com/t02e15.png

 

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <utility>
#include <map>
using namespace std;

struct Korta {
   char r;
   int s;
   bool operator<(const Korta& b) const {
       return s < b.s;
   }
} k[110];

int main() {
   freopen("d.txt", "r", stdin);
   int n;
   cin >> n;
   map<pair<char, int>, int> visos;
   for (int i = 0; i < n; i++) {
       cin >> k[i].r >> k[i].s;
       visos[make_pair(k[i].r, k[i].s)]++;
   }
   sort(k, k + n);
   bool yra = false;
   for (int i = 0; i < n; i++) {
       if (visos.find(make_pair(k[i].r, k[i].s))->second > 0) {
           vector<int> seka(1, i);
           for (int j = (i + 1 < n ? i + 1 : i); j < n; j++) {
               if (visos.find(make_pair(k[j].r, k[j].s))->second > 0 && k[i].r == k[j].r && k[j].s - k[seka.back()].s == 1) {
                   seka.push_back(j);
               }
           }
           if (seka.size() > 2) {
               yra = true;
               for (int j = 0; j < seka.size(); j++) {
                   visos[make_pair(k[seka[j]].r, k[seka[j]].s)]--;
                   cout << k[seka[j]].r << " " << k[seka[j]].s << " ";
               }
               cout << "\n";
           }
       }
   }
   if (!yra) {
       cout << "Nera\n";
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

manau, taip galima. Papildomai dar atsakymo sekas surikiuot reikia ^_^

 

http://i62.tinypic.com/t02e15.png

 

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <utility>
#include <map>
using namespace std;

struct Korta {
   char r;
   int s;
   bool operator<(const Korta& b) const {
       return s < b.s;
   }
} k[110];

int main() {
   freopen("d.txt", "r", stdin);
   int n;
   cin >> n;
   map<pair<char, int>, int> visos;
   for (int i = 0; i < n; i++) {
       cin >> k[i].r >> k[i].s;
       visos[make_pair(k[i].r, k[i].s)]++;
   }
   sort(k, k + n);
   bool yra = false;
   for (int i = 0; i < n; i++) {
       if (visos.find(make_pair(k[i].r, k[i].s))->second > 0) {
           vector<int> seka(1, i);
           for (int j = (i + 1 < n ? i + 1 : i); j < n; j++) {
               if (visos.find(make_pair(k[j].r, k[j].s))->second > 0 && k[i].r == k[j].r && k[j].s - k[seka.back()].s == 1) {
                   seka.push_back(j);
               }
           }
           if (seka.size() > 2) {
               yra = true;
               for (int j = 0; j < seka.size(); j++) {
                   visos[make_pair(k[seka[j]].r, k[seka[j]].s)]--;
                   cout << k[seka[j]].r << " " << k[seka[j]].s << " ";
               }
               cout << "\n";
           }
       }
   }
   if (!yra) {
       cout << "Nera\n";
   }
}

Nu dekui nors daugiau nei puse nesuprantu kas ir kaip, nes as galima sakyt moku tik pagrindus.

Redagavo xamer
Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 mėnesių...
  • po 4 mėnesių...

Nuskaityk, surikiuok (pirma pagal spalva, po to pagal skaičių, arba turėk kiekvienai spalvai atskira masyvą) ir tada paprasčiausiai eik per visus elementus ir ieškok sekų (tai neturėtų būti sunku).

 

Gal galit padėt, kaip reikia surikiuoti masyvą pagal spalvą?

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...
  • po 7 metų...

#include <fstream>

using namespace std;

//--- Globalieji parametrai ---
const char CDfd[] = "Duomenys.txt";
const char CDfr[] = "Rezultatas.txt";
const int CMax = 104;
//--- Funkciju parametrai ---
void Skaityti(char A[], int B[], int &n);
void Spausdinti(int R[], int r, int G[], int g, int M[], int m, int J[], int j);
void MSdydis(char A[], int B[], int n, int &r, int &g, int &m, int &j); // Masyvo spalvu dydis
int Perrasymas(char A[], int B[], int n, int R[], int G[], int M[], int J[]); // Masyvo spalvu perrasymas
int Rikiavimas(int R[], int r, int G[], int g, int M[], int m, int J[], int j); // Masyvu rikiavimas didjancia tvarka
//--- Pagrindine Funkcija ---
int main (){
    char A[CMax];
    int B[CMax], n;
    Skaityti(A, B, n);
    int r = 0, g = 0, j = 0, m = 0;
    MSdydis(A, B, n, r, g, m, j); // Masyvo spalvu dydis
    int R[r], G[g], M[m], J[j];
    Perrasymas(A, B, n, R, G, M, J); // Masyvo spalvu perrasymas
    Rikiavimas(R, r, G, g, M, m, J, j); // Masyvu rikiavimas didjancia tvarka
    Spausdinti(R, r, G, g, M, m, J, j);
    return 0;
}
//--- Funkcijos ---
void Skaityti(char A[], int B[], int &n){
    ifstream fd(CDfd);
    fd >> n;
    for(int i = 0; i < n; ++i){
        fd >> A[i] >> B[i];
    }
    fd.close();
}
void Spausdinti(int R[], int r, int G[], int g, int M[], int m, int J[], int j){
    ofstream fr(CDfr);
    int r1 = 0, g1 = 0, m1 = 0, j1 = 0;
    if(r > 2){
        for(int i = 0; i < r; ++i){
            int x = i, kiek = 1;
            while(R[x] + 1 == R[x + 1]){
                ++kiek;
                ++x;
            }
            if(kiek > 2){
                for(int j = i; j < i + kiek; ++j){
                    fr << "R " << R[j] << " ";
                }
                fr << endl;
                i += kiek - 1;
                ++r1;
            }
        }
    }
    if(g > 2){
        for(int i = 0; i < g; ++i){
            int x = i, kiek = 1;
            while(G[x] + 1 == G[x + 1]){
                ++kiek;
                ++x;
            }
            if(kiek > 2){
                for(int j = i; j < i + kiek; ++j){
                    fr << "G " << G[j] << " ";
                }
                fr << endl;
                i += kiek - 1;
                ++g1;
            }
        }
    }
    if(m > 2){
        for(int i = 0; i < m; ++i){
            int x = i, kiek = 1;
            while(M[x] + 1 == M[x + 1]){
                ++kiek;
                ++x;
            }
            if(kiek > 2){
                for(int j = i; j < i + kiek; ++j){
                    fr << "M " << M[j] << " ";
                }
                fr << endl;
                i += kiek - 1;
                ++m1;
            }
        }
    }
    if(j > 2){
        for(int i = 0; i < j; ++i){
            int x = i, kiek = 1;
            while(J[x] + 1 == J[x + 1]){
                ++kiek;
                ++x;
            }
            if(kiek > 2){
                for(int k = i; k < i + kiek; ++k){
                    fr << "J " << J[k] << " ";
                }
                fr << endl;
                i += kiek - 1;
                ++j1;
            }
        }
    }
    if(r1 < 1 && g1 < 1 && m1 < 1 && j1 < 1) fr << "Nera";
    fr.close();
}
void MSdydis(char A[], int B[], int n, int &r, int &g, int &m, int &j){ // Masyvo spalvu dydis
    for(int i = 0; i < n; ++i){
        if(A[i] == 'R') ++r;
        if(A[i] == 'G') ++g;
        if(A[i] == 'M') ++m;
        if(A[i] == 'J') ++j;
    }
}
int Perrasymas(char A[], int B[], int n, int R[], int G[], int M[], int J[]){ // Masyvo spalvu perrasymas
    int rr = 0, gg = 0, mm = 0, jj = 0;
    for(int i = 0; i < n; ++i){ 
        if(A[i] == 'R'){
            R[rr] = B[i];
            ++rr;
        }
        if(A[i] == 'G'){
            G[gg] = B[i];
            ++gg;
        }
        if(A[i] == 'M'){
            M[mm] = B[i];
            ++mm;
        }
        if(A[i] == 'J'){
            J[jj] = B[i];
            ++jj;
        }
    }
}
int Rikiavimas(int R[], int r, int G[], int g, int M[], int m, int J[], int j){ // Masyvu rikiavimas didjancia tvarka
    for(int i = 0; i < r - 1; ++i){ // Raudona
        for(int j = i + 1; j < r; ++j){
            if(R[i] > R[j]){
                int temp = R[i];
                R[i] = R[j];
                R[j] = temp;
            }
            if(R[i] == R[j]){
                int temp = R[j];
                R[j] = R[r - 1];
                R[r - 1] = temp;
            }
        }
    }
    for(int i = 0; i < r; ++i){ // Raudona, jeigu kartojasi
        if(R[i] == R[i + 1]){
            int x = i + 1;
            while(x < r - 1){
                int temp = R[x];
                R[x] = R[x + 1];
                R[x + 1] = temp;
                ++x;
            }
        }
    }
    for(int i = 0; i < g; ++i){ // Geltona
        for(int j = i + 1; j < g; ++j){
            if(G[i] > G[j]){
                int temp = G[i];
                G[i] = G[j];
                G[j] = temp;
            }
        }
    }
    for(int i = 0; i < g; ++i){ // Geltona, jeigu kartojasi
        if(G[i] == G[i + 1]){
            int x = i + 1;
            while(x < g - 1){
                int temp = G[x];
                G[x] = G[x + 1];
                G[x + 1] = temp;
                ++x;
            }
        }
    }
    for(int i = 0; i < m; ++i){ // Melyna
        for(int j = i + 1; j < m; ++j){
            if(M[i] > M[j]){
                int temp = M[i];
                M[i] = M[j];
                M[j] = temp;
            }
            
        }
        
    }
    for(int i = 0; i < m; ++i){ // Melyna, jeigu kartojasi
        if(M[i] == M[i + 1]){
            int x = i + 1;
            while(x < m - 1){
                int temp = M[x];
                M[x] = M[x + 1];
                M[x + 1] = temp;
                ++x;
            }
        }
    }
    for(int i = 0; i < j; ++i){ // Juoda
        for(int k = i + 1; k < j; ++k){
            if(J[i] > J[k]){
                int temp = J[i];
                J[i] = J[k];
                J[k] = temp;
            }
        }
    }
    for(int i = 0; i < j; ++i){ // Juoda, jeigu kartojasi
        if(J[i] == J[i + 1]){
            int x = i + 1;
            while(x < j - 1){
                int temp = J[x];
                J[x] = J[x + 1];
                J[x + 1] = temp;
                ++x;
            }
        }
    }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...