Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.13 KB | None | 0 0
  1. from random import randint
  2. from problem import Problem
  3.  
  4. def numar(x,stack):
  5.      stack.append(x); #O(n)
  6.  
  7. def p(arr,stack):
  8.      arr.append(stack.pop()); #O(n)
  9.      
  10. def div2(a):
  11.      if a%2 == 0:
  12.           return int(a/2-1);
  13.      else:
  14.           return int(a/2);
  15.  
  16.  
  17. class Problem3(Problem):
  18.     def __init__(self):
  19.         statement = '3. Primiti o stiva. Operatii: \n'
  20.         statement += 'numar -> se inseaza numarul in stiva \n'
  21.         statement += 'P -> se extrage un numar din stiva si se afiseaza \n'
  22.         statement += 'Gasiti o succesiune de mutari a.i. introducand el. 1 2 3 4 5 in stiva (in aceasta ordine) la final sa se afiseze 3 2 4 5 1.'
  23.         statement += '\n\n\n'
  24.        
  25.         data=[];
  26.         n=randint(3,99);  
  27.         for i in range (1,n):
  28.           data.append(randint(1,99));
  29.         super().__init__(statement, data)
  30.        
  31.     def solve(self):
  32.           solution = 'Vom parcurge vectorul\n'
  33.           solution += 'Se va citi in ordine urmatoarele numere: \n'
  34.           n = len(data);    
  35.           print(data);    
  36.           stack = [];
  37.           arr = [];
  38.           ok = 0; #ok := verifica daca s-a citit pana la prima jumatate
  39.           i = 0;
  40.           contor = 1;
  41.           n = n-1;
  42.           while i <= n: #O(n^2)
  43.                       if i <= div2(n):
  44.                             if ok == 0:
  45.                                    e = data[i]
  46.                                    numar(e,stack)
  47.                                    solution +='S-a introdus in stiva numarul ' + str(e) + ' lungimea fiind ' + str(len(stack)) + '\n'
  48.                                    if i == div2(n):
  49.                                               ok = 1;
  50.                                               i = 1;
  51.                                    else:
  52.                                         i = i + 1;
  53.                                         contor += 1;
  54.                                        
  55.                             elif contor != 1:
  56.                                     solution += 'Se va elimina din stiva numarul ' + str(data[contor-1]) + '\n'
  57.                                     p(arr,stack);
  58.                                     i = i + 1;
  59.                                     contor -= 1
  60.                             if ok == 1 & contor == 1:
  61.                                     contor = div2(n) + 1;
  62.                                    
  63.                       else:
  64.                             if contor == n:
  65.                                 break;
  66.                             e = data[contor];
  67.                             numar(e,stack);
  68.                             solution +='S-a introdus in stiva numarul ' + str(e) + '\n'
  69.                             solution += 'Se va elimina din stiva numarul ' + str(data[contor-1]) + '\n'
  70.                             p(arr,stack);
  71.                             contor = contor + 1;
  72.                             i = i + 1;
  73.                                
  74.           solution += 'Se va elimina din stiva numarul ' + str(stack[0]) + '\n'  
  75.           p(arr,stack);
  76.          
  77.           solution += 'Rezultatul final este : ' + str(arr) + '\n'
  78.           return(solution);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement