196-algorithm
Coddy'nin Matematiksel Bilmeceler kursunda ders 20 / 20.
Eğer 38 sayısını alıp ters çevirip toplarsak, 38 + 83 = 121 elde ederiz ki bu palindromiktir.
Tüm sayılar bu kadar çabuk palindrom üretmez. Örneğin,
- 37 + 73 = 110
- 110 + 11 = 121
Yani, 37'nin bir palindroma ulaşması iki yineleme sürdü.
249 ile başlayan başka bir örnek:
- 249+942=1191
- 1191+1911=3102
- 3102+2013=5115.
11, 343 gibi palindrom sayıların sıfır yinelemede palindrom olduğu varsayılır.
Herhangi bir pozitif tam sayıyı alın, basamaklarını ters çevirin ve orijinal sayıya ekleyin. Bu, ters çevir ve topla işleminin (reverse-and-add process) işleyişidir. Şimdi, elde edilen toplamla bir palindromik sayı elde edilene kadar prosedürü tekrarlayın. Bu prosedür, çoğu tam sayı için hızlı bir şekilde palindromik sayılar üretir.
Ters çevir ve topla işlemiyle asla bir palindrom oluşturmayan sayıya Lychrel sayısı denir. Palindrom ürettiği bilinmeyen ilk birkaç sayı, "aday Lychrel" sayıları 196, 295, 394'tür. [https://mathworld.wolfram.com/196-Algorithm.html]
Görev
OrtaHenüz kimse kanıtlamamış olsa da, 10'luk sayı sistemindeki 196 gibi bazı sayılar asla bir palindrom oluşturmaz. Bu meydan okuma amacıyla, aksi kanıtlanana kadar bir sayının Lychrel olduğunu varsayacağız. On binden küçük her sayı ya (i) elliden az yinelemede bir palindroma dönüşür ya da (ii) mevcut tüm işlem gücüyle bile şimdiye kadar kimse onu bir palindroma eşlemeyi başaramamıştır.
10000'den küçük pozitif bir tam sayı alan ve palindrom haline gelmesi için gereken yineleme sayısını döndüren bir isLychrel fonksiyonu yazın.
Elli yinelemeden fazla sürerse -1 döndürün.
Kendin dene
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "solution.h"
int main() {
int n;
if (scanf("%d", &n) != 1) n = 0;
int r = isLychrel(n);
printf("%d\n", r);
return 0;
}