Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

196-algorithm

الدرس 20 من 20 في دورة ألغاز رياضية على Coddy.

إذا أخذنا 38، وعكسناه وجمعناه، 38 + 83 = 121، وهو عدد متناظر.

لا تنتج جميع الأرقام أعداداً متناظرة بهذه السرعة. على سبيل المثال،

  1. 37 + 73 = 110
  2. 110 + 11 = 121

أي أن الرقم 37 استغرق تكرارين للوصول إلى عدد متناظر.

مثال آخر، بدءاً من 249:

  1. 249+942=1191
  2. 1191+1911=3102
  3. 3102+2013=5115.

الأعداد المتناظرة مثل 11، 343، يُفترض أنها تصبح متناظرة في صفر من التكرارات.

 

خذ أي عدد صحيح موجب، واعكس أرقامه، وأضفه إلى العدد الأصلي. هذه هي عملية العكس والجمع. الآن كرر الإجراء مع المجموع الناتج حتى يتم الحصول على عدد متناظر. ينتج هذا الإجراء بسرعة أعداداً متناظرة لمعظم الأعداد الصحيحة.

 

يُسمى العدد الذي لا يشكل أبداً عدداً متناظراً من خلال عملية العكس والجمع بـ عدد ليتشريل. الأرقام القليلة الأولى التي لا يُعرف عنها أنها تنتج أعداداً متناظرة، وهي أرقام "ليتشريل المرشحة"، هي 196، 295، 394. [https://mathworld.wolfram.com/196-Algorithm.html]

challenge icon

التحدي

متوسط

على الرغم من عدم تمكن أي شخص من إثبات ذلك حتى الآن، إلا أن بعض الأرقام في نظام العد العشري، مثل 196، لا تنتج أبداً عدداً متناظراً (palindrome). لغرض هذا التحدي، سنفترض أن الرقم هو رقم "ليشريل" (Lychrel) ما لم يثبت خلاف ذلك. كل رقم أقل من عشرة آلاف، فإنه إما (أ) يصبح عدداً متناظراً في أقل من خمسين تكراراً، أو (ب) لم يتمكن أحد، بكل القوة الحسابية الموجودة، من تحويله إلى عدد متناظر حتى الآن.

اكتب دالة isLychrel تستقبل عدداً صحيحاً موجباً أصغر من 10000، وتعيد عدد التكرارات التي يستغرقها ليصبح عدداً متناظراً.

أعد -1 في حال مرور أكثر من خمسين تكراراً.

جرّب بنفسك

#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;
}

جميع دروس ألغاز رياضية

7Least common multiple

IntroductionA problem

10Palindromes

Introduction196-algorithm