3677 - Cifre Vecine: Difference between revisions
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/3677/cifrevecine] ---- == Cerinţa == Se dau două numere naturale '''n''' și '''k'''. Determinați cea mai mare valoare care se poate obține eliminând din numărul '''n''' exact '''k''' cifre aflate pe poziții alăturate(una după alta). == Date de intrare == Fișierul de intrare va conține pe prima linie numărul n și pe a doua linie nunărul k. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''... |
No edit summary |
||
Line 4: | Line 4: | ||
Se dau două numere naturale '''n''' și '''k'''. Determinați cea mai mare valoare care se poate obține eliminând din numărul '''n''' exact '''k''' cifre aflate pe poziții alăturate(una după alta). | Se dau două numere naturale '''n''' și '''k'''. Determinați cea mai mare valoare care se poate obține eliminând din numărul '''n''' exact '''k''' cifre aflate pe poziții alăturate(una după alta). | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare va conține pe prima linie numărul n și pe a doua linie nunărul k. | Fișierul de intrare va conține pe prima linie numărul '''n''' și pe a doua linie nunărul '''k'''. | ||
== Date de ieșire == | == Date de ieșire == | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi în fișierul de ieșire se va scrie pe prima linie valoarea cerută. | Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi în fișierul de ieșire se va scrie pe prima linie valoarea cerută. |
Revision as of 18:43, 26 April 2023
Sursa: [1]
Cerinţa
Se dau două numere naturale n și k. Determinați cea mai mare valoare care se poate obține eliminând din numărul n exact k cifre aflate pe poziții alăturate(una după alta).
Date de intrare
Fișierul de intrare va conține pe prima linie numărul n și pe a doua linie nunărul k.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi în fișierul de ieșire se va scrie pe prima linie valoarea cerută. În caz contrar, pe ecran se va afișa: "Datele nu au fost introduse corect."
Restricţii şi precizări
- n este un număr cuprins între 10 și inclusiv.
- 1 ≤ k < numărul de cifre ale lui n.
- pentru 50 de puncte k este 1.
Exemple
Exemplul 1
- cifrevecine.in
- 10002
- 3
- Ecran
- Datele sunt introduse corect.
- cifrevecine.out
- 12
Exemplul 2
- cifrevecine.in
- 1938
- 2
- Ecran
- Datele sunt introduse corect.
- cifrevecine.out
- 38
Rezolvare
<syntaxhighlight lang="python" line>
- 3677
def verificare_date_intrare(n: int, k: int) -> bool:
if not(10 <= n <= 10**17 and 1 <= k < len(str(n))): print("Datele nu au fost introduse corect.") return False print("Datele sunt introduse corect.") return True
def rezolva_problema(n: int, k: int) -> int:
n_str = str(n) max_val = 0 for i in range(len(n_str)-k): val = int(n_str[:i] + n_str[i+k:]) if val > max_val: max_val = val return max_val
if __name__ == "__main__":
with open("cifrevecine.in") as f: n = int(f.readline().strip()) k = int(f.readline().strip()) if not verificare_date_intrare(n, k): return with open("cifrevecine.out", "w") as f: f.write(str(rezolva_problema(n, k)))
</syntaxhighlight>
Explicație rezolvare
Funcția verificare_date_intrare primește două argumente întregi, n și k, și returnează True dacă datele introduse sunt corecte și False altfel. Verificarea se face astfel: dacă n nu este cuprins între 10 și inclusiv sau k nu este cuprins între 1 și numărul de cifre ale lui n (calculat cu len(str(n))), atunci afișează un mesaj de eroare și returnează False. În caz contrar, afișează un mesaj de confirmare și returnează True.
Funcția rezolva_problema primește două argumente întregi, n și k, și returnează o valoare întreagă, cea mai mare valoare care se poate obține eliminând din numărul n exact k cifre aflate pe poziții alăturate (una după alta). Mai întâi, n este convertit într-un șir de caractere n_str. Apoi, se inițializează max_val cu 0 și se parcurg toate subșirurile de lungime len(n_str) - k ale lui n_str. Pentru fiecare subșir n_str[:i] + n_str[i+k:], se elimină cifrele aflate pe poziții alăturate și se obține un nou număr, val. Dacă val este mai mare decât max_val, se actualizează max_val cu val. La final, se returnează max_val.
În blocul principal if __name__ == "__main__":, se deschide fișierul de intrare "cifrevecine.in", se citesc valorile lui n și k, și se verifică dacă datele sunt corecte cu ajutorul funcției verificare_date_intrare. Dacă datele nu sunt corecte, programul se oprește. În caz contrar, se deschide fișierul de ieșire "cifrevecine.out" și se scrie valoarea returnată de funcția rezolva_problema în fișier.