Дмитрий Висков
Ученик
(46),
на голосовании
3 месяца назад
Чтобы обезопасить денежные средства своих клиентов, компания РусБанк пригласила Вас, как юного специалиста найти ошибку в их шифровальном алгоритме. Ниже дана программа, которая шифрует номер банковской карты.
#include <iostream>
#include <string>
using namespace std;
string secureNum(string s) {
string t = "";
for (int i = 0; i < s.length(); i++)
{
if (s.length() > 3)
t += '*';
else
t += s[i];
}
return t;
}
int main() {
string s = "9875876509812";
cout << secureNum(s);
return 0;
}
Так, для строки, хранящейся в переменной s, алгоритм должен вывести результат «9875*********».
В указанном выше алгоритме допущена ошибка в одной строчке кода. Найдите и исправьте ее. В ответе укажите исправленную строку кода. Ответ записывайте без использования пробелов!
Правильным по форме, но не по содержанию является ответ вида:
Ошибка и её исправление Ошибка заключается в строке: C++ if (s.length() > 3) t += '*'; else t += s[i]; Объяснение: • Алгоритм пытается зашифровать все символы, кроме последних 4. • Проверка s.length() > 3 используется для определения, является ли номер карты достаточно длинным. • Если номер карты короче 4 символов, то все символы шифруются звездочками (t += '*'). • Если номер карты содержит 4 или более символов, то последние 4 символа не шифруются (t += s[i]). Проблема: • Условие s.length() > 3 некорректное. • Если номер карты точно равен 4 символам, то все символы будут зашифрованы звездочками, вместо того, чтобы оставить последние 4 символа без изменений. Исправление: Исправить ошибку можно, изменив условие проверки длины номера карты. Варианты исправления: 1. Использовать оператор >=: C++ if (s.length() >= 4) t += '*'; else t += s[i]; 2. Использовать дополнительную проверку: C++ if (s.length() > 4) t += '*'; else t += s[i]; Обе версии исправления корректны. Важно: • Выбор исправления может зависеть от стилистических предпочтений или от требований кодирования, принятых в компании РусБанк. • Рекомендуется добавить комментарии к коду, чтобы объяснить, что делает код и почему были внесены изменения. Исправленная строка кода (без пробелов): C++ if (s.length() >= 4) t += '*'; else t += s[i];
Ниже дана программа, которая шифрует номер банковской карты.
#include <iostream>
#include <string>
using namespace std;
string secureNum(string s) {
string t = "";
for (int i = 0; i < s.length(); i++)
{
if (s.length() > 3)
t += '*';
else
t += s[i];
}
return t;
}
int main() {
string s = "9875876509812";
cout << secureNum(s);
return 0;
}
Так, для строки, хранящейся в переменной s, алгоритм должен вывести результат «9875*********».
В указанном выше алгоритме допущена ошибка в одной строчке кода. Найдите и исправьте ее. В ответе укажите исправленную строку кода. Ответ записывайте без использования пробелов!
Правильным по форме, но не по содержанию является ответ вида:
while(a<5&&arr[i]>8)