متتالية لاعب الخفة

من موسوعة حسوب

متتالية لاعبة الخفة Juggler Sequence هي متتالية من الأعداد الصحيحة التي يكون فيها العنصر الأول عددًا صحيحًا موجبًا ويُنتج كل رقم فيها بالاعتماد على العلاقة التعاودية التالية والتي تربطه بالعدد الذي يسبقه:

فعلى سبيل المثال، تضم المتتالية التي تبدأ بالرقم 3 الأعداد التالية:

3, 5, 11, 36, 6, 2, 1

فعلى سبيل المثال، تضم المتتالية التي تبدأ بالرقم 9 الأعداد التالية:

9, 27, 140, 11, 36, 6, 2, 1

ملاحظات:

  • يلاحظ من الأمثلة السابقة أنّ الأعداد في متتالية لاعب الخفة تبدأ بالصعود تدريجيًا لتصل إلى قيمة عظمى معينة ثم تبدأ بعدها بالتناقص تدريجيًا.
  • تنتهي متتالية لاعب الخفة بالعدد 1 دائمًا.

تنفيذ الخوارزمية

تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:

  • C++‎:
#include<stdio.h> 
#include<math.h> 

void printJuggler(int n) 
{ 
	int a = n; 

	// طباعة العنصر الأول
	printf("%d ", a); 

	// حساب بقية العناصر ما دام العنصر الأخير لا يساوي 1
	while (a != 1) 
	{ 
		int b = 0; 

		// التحقق من كون العنصر السابق زوجيًا أو فرديًا
		if (a%2 == 0) 

			// حساب العنصر التالي
			b = floor(sqrt(a)); 

		else

			// إن كان العنصر السابق فرديًا
			b = floor(sqrt(a)*sqrt(a)*sqrt(a)); 

		printf("%d ", b); 
		a = b; 
	} 
} 

//اختبار الدال السابقة
int main() 
{ 
	printJuggler(3); 
	printf("\n"); 
	printJuggler(9); 
	return 0; 
}
  • بايثون:
import math 

def printJuggler(n) : 
	a = n 
	
	# طباعة العنصر الأول
	print a, 
	
	# حساب العناصر ما دام العنصر الأخير لا يساوي 1
	while (a != 1) : 
		b = 0
		
		# التحقق من كون العنصر الأول زوجيًا أو فرديًا
		if (a%2 == 0) : 
			
			# حساب العنصر التالي
			b = (int)(math.floor(math.sqrt(a))) 

		else : 
			# إن كان العنصر السابق فرديًا
			b = (int) (math.floor(math.sqrt(a)*math.sqrt(a)*
										math.sqrt(a))) 

		print b, 
		a = b 

printJuggler(3) 
print
printJuggler(9)
  • جافا:
import java.io.*; 
import java.math.*; 

class GFG { 
	
	static void printJuggler(int n) 
	{ 
		int a = n; 
	
	// طباعة العنصر الأول
	System.out.print(a+" "); 
	
	// حساب العناصر ما دام العنصر الأخير لا يساوي 1
	while (a != 1) 
	{ 
		int b = 0; 
	
		// التحقق من كون العنصر السابق زوجيًا أو فرديًا
		if (a%2 == 0) 
	
			// حساب العنصر التالي
				b = (int)Math.floor(Math.sqrt(a)); 
	
		else
	
			// إن كان العنصر السابق فرديًا
				b =(int) Math.floor(Math.sqrt(a) * 
							Math.sqrt(a) * Math.sqrt(a)); 
	
		System.out.print( b+" "); 
		a = b; 
		} 
	} 

// اختبار التابع السابق
public static void main (String[] args) { 
	printJuggler(3); 
	System.out.println(); 
	printJuggler(9); 
	} 
}

تعطي الشيفرة السابقة المخرجات التالية:

3 5 11 36 6 2 1 
9 27 140 11 36 6 2 1

مصادر

  • صفحة Juggler Sequence في توثيق الخوارزميات في موقع GeeksforGeeks.