Se consideră un şir de cel puțin 11 şi cel mult un 10000 de numere naturale, despărțite prin câte un spațiu. Fiecare număr are cel puțin două şi cel mult nouă cifre. Primul termen al şirului are numărul de ordine 1, al doilea are numărul de ordine 2 etc. Se citeşte şirul din fişier şi se cere să se determine numărul de ordine al unui termen al şirului care este precedat în fişier de un număr maxim de valori care au cifra zecilor egală cu a sa. Dacă sunt mai mulți termeni cu această proprietate se afişează numărul de ordine al primului.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
// Deschidem fişierul
ifstream file("input.txt");
if (!file.is_open()) {
cout << "Nu am putut deschide fişierul!" << endl;
return 1;
}
// Citim şirul de numere din fişier
vector<int> numbers;
int n;
while (file >> n) {
numbers.push_back(n);
}
file.close();
// Determinăm numărul de termeni cu aceeași cifră a zecilor
int max_count = 0;
int max_index = 0;
int count = 0;
for (int i = 1; i < numbers.size(); i++) {
int tens_digit = (numbers[i] / 10) % 10;
int prev_tens_digit = (numbers[i-1] / 10) % 10;
if (tens_digit == prev_tens_digit) {
count++;
} else {
if (count > max_count) {
max_count = count;
max_index = i-1;
}
count = 0;
}
}
if (count > max_count) {
max_count = count;
max_index = numbers.size()-1;
}
// Găsim termenul cu numărul maxim de termeni cu aceeași cifră a zecilor care precede un alt termen cu cifra zecilor diferită
count = 0;
for (int i = max_index; i > 0; i--) {
int tens_digit = (numbers[i] / 10) % 10;
int prev_tens_digit = (numbers[i-1] / 10) % 10;
if (tens_digit != prev_tens_digit) {
break;
} else {
count++;
}
}
int result = max_index - count + 1;
// Afişăm rezultatul
cout << "Numărul de ordine al termenului cu numărul maxim de termeni cu aceeași cifră a zecilor care precede un alt termen cu cifra zecilor diferită este: " << result << endl;
return 0;