Andziev

Влезници (Испит Август 2016)

Jan 7th, 2017
450
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. using namespace std;
  5.  
  6. char randomDigit() {
  7.     return '0' + rand() % 10;
  8. }
  9.  
  10. char randomChar() {
  11.     return 'A' + rand() % 26;
  12. }
  13.  
  14. class Ticket {
  15.     protected:
  16.         char code [50];
  17.         int size;
  18.     public:
  19.         void setCode (char *code) {
  20.             strcpy(this->code,code);
  21.         }
  22.         void setSize (int size) {
  23.             this->size = size;
  24.         }
  25.         virtual bool validate () = 0;
  26.         virtual bool operator == (Ticket &t) {
  27.             return !strcmp(code,t.code);
  28.         }
  29.         friend ostream& operator << (ostream &out, Ticket &t) {
  30.             return out << t.code;
  31.         }
  32. };
  33.  
  34. class DigitTicket : public Ticket {
  35.     public:
  36.         DigitTicket (int size) {
  37.             char *code = new char [size];
  38.             for(int i=0; i<size; i++) {
  39.                 code[i] = randomDigit ();
  40.             }
  41.             setCode (code);
  42.             setSize (size);
  43.         }
  44.         bool validate () {
  45.             int sum = 0;
  46.             for(int i=0; i<size; i++) {
  47.                 sum += code[i] - '0';
  48.             }
  49.             return !(sum%7);
  50.         }
  51.         bool operator == (DigitTicket &t) {
  52.             return !strcmp(code,t.code);
  53.         }
  54. };
  55.  
  56. class CharTicket : public Ticket {
  57.     public:
  58.         CharTicket (int size) {
  59.             char *code = new char [size];
  60.             for(int i=0; i<size; i++) {
  61.                 code[i] = randomChar ();
  62.             }
  63.             setCode (code);
  64.             setSize (size);
  65.         }
  66.         bool validate () {
  67.             int sum = 0;
  68.             for(int i=0; i<size; i++) {
  69.                 sum += (int) code[i];
  70.             }
  71.             return !(sum%3);
  72.         }
  73.         bool operator == (CharTicket &t) {
  74.             return !strcmp(code,t.code);
  75.         }
  76. };
  77.  
  78. int valid (Ticket **tickets, int n) {
  79.     int count = 0;
  80.     for(int i=0; i<n; i++) {
  81.         if(tickets[i]->validate())
  82.             ++count;
  83.     }
  84.     return count;
  85. }
  86.  
  87. int unique (Ticket **tickets, int n) {
  88.     int count = 0;
  89.     for(int i=0; i<n; i++) {
  90.         int found = 0;
  91.         for(int j=0; j<n; j++) {
  92.             if(*tickets[i] == *tickets[j])
  93.                 ++found;
  94.         }
  95.         if(found == 1)
  96.             ++count;
  97.     }
  98.     return count;
  99. }
  100.  
  101. int main() {
  102.     int seed;
  103.     cin >> seed;
  104.     srand (seed);
  105.     int n;
  106.     cin >> n;
  107.     Ticket **t = new Ticket*[n];
  108.     cout << "===== ALL TICKETS (" << n << ") =====" << endl;
  109.     for(int i = 0; i < n; ++i) {
  110.         int x;
  111.         cin >> x;
  112.         if(i % 2 == 0) {
  113.             t[i] = new DigitTicket(x);
  114.         } else {
  115.             t[i] = new CharTicket(x);
  116.         }
  117.         cout << *t[i] << endl;
  118.     }
  119.     cout << "===== VALID =====" << endl;
  120.     cout << valid(t, n) << endl;
  121.    
  122.     cout << "===== UNIQUE =====" << endl;
  123.     cout << unique(t, n) << endl;
  124.    
  125.     for(int i = 0; i < n; ++i) {
  126.         delete t[i];
  127.     }
  128.     delete [] t;
  129.     return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment