Yulius Sezarın Şifrəsi#2164

Yulius Sezarın Şifrəsi (Həll təhlili)

Hər bir hərfi dövrü olaraq mövqedə geri çəkməklə deşifrə etmək olar. Hərflərə ('')-dan ('')-ə qədər nömrə verək.

— cari şifrə hərfi olsun. Onun əlifbadakı nömrəsi - '' olaraq hesablanır. Əlifbanın dövrü olduğunu nəzərə alaraq (əvvəll '', sonra '' gəlir) geri sürüşdürmək üçün çıxıb, və modulu ilə qalıq alarıq. Sonra deşifrələnmiş hərfin ASCII kodunu almaq üçün '' əlavə edərik.

Beləliklə, deşifrə əməliyyatı aşağıdakı kimi görünür:

s[i] = (s[i] - 'A' - k + 26)~\%~26 + 'A'

Alqoritmin realizasiyası

Daxil olan boşluğu bir simvollar massivi -də saxlayacağıq.

char s[1000];

Daxil olan məlumatları oxuyuruq.

gets(s); scanf("%d", &k);

Simvolları deşifrə qaydasına uyğun olaraq çevirmək.

for (i = 0; i < strlen(s); i++)
  s[i] = (((s[i] - 'A') + 26 - k) % 26) + 'A';

Deşifrələnmiş mətni çıxarıq.

puts(s);

Alqoritmin realizasiyası – STL

Daxil olan məlumatları oxuyuruq.

cin >> s >> k;

Simvolları deşifrə qaydasına uyğun olaraq çevirmək.

for (i = 0; i < s.size(); i++)
  s[i] = (((s[i] - 'A') + 26 - k) % 26) + 'A';

Deşifrələnmiş mətni çıxarıq.

cout << s << endl;

Python realizasiyası

Daxil olan məlumatları oxuyuruq.

s = input()
k = int(input())

Simvolları deşifrə qaydasına uyğun olaraq çevirmək.

s = ''.join(chr(((ord(c) - ord('A') - k + 26) % 26) + ord('A')) 
                for c in s)

Deşifrələnmiş mətni çıxarıq.

print(s)