رفتن به مطلب
بخش Unity به انجمن اضافه شد
  • 0

راهنمایی در زمینه پیاده سازی تابع جایگشت


DexterFstone

سوال

سلام به اساتید

به تابع جایگشت نیاز دارم اگه امکانش هست در این زمینه کمک کنید خودم سیع کردم بنویسمش ولی کمی به مشکل خوردم 

برای مثال میخوام ورودی زیر بدم

Dim inputs() as string = arrays as string("A","B","C")

و خروجی زیر را دریافت کنم

A
B
C
AB
AC
BA
BC
CA
CB
ABC
BAC
CAB
...

و همینطور به همین ترتیب و حتما میخوام بصورت ارایه بدم (مثل Inputs) نه بصورت یک رشته واحد ("ABC") و بیاد عملیات جداسازی انجام بشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

4 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

تابع رو براتون ویرایش و همچنین بهینه کردم:

Sub Permutation(input() As String,Separator As String)
	For counter=1 To input.Length
		If counter=1 Then
			For u=0 To input.Length-1
				Log(input(u)) 'خروجی تک عضوی ها
			Next
		Else
			Dim Output As String
			Dim p,c As Int
			For R=0 To input.Length-1
				For y=R+1 To R+input.Length-1
					c=0
					Output=input(R)
					Do While Regex.Split(Separator,Output).Length<counter
						p=(y+c) Mod input.Length
						If p<>R Then Output=Output &Separator& input(p)
						c=c+1
					Loop
					Log(Output) 'خروجی
				Next
			Next
		End If
	Next
End Sub

این تابع دوتا ورودی میگیره که اولیش همون آرایه و دومیش هم جدا کننده خروجی هست:

Dim inputs() As String = Array As String("java","PHP","Python")
Permutation(inputs,"/")

خروجی:

java
PHP
Python
java/PHP
java/Python
PHP/Python
PHP/java
Python/java
Python/PHP
java/PHP/Python
java/Python/PHP
PHP/Python/java
PHP/java/Python
Python/java/PHP
Python/PHP/java

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

این تابع رو اضافه کنین:

Sub Permutation(input() As String)
	For counter=1 To input.Length
		If counter=1 Then
			For u=0 To input.Length-1
				Log(input(u)) 'خروجی تک عضوی ها
			Next
		Else
			Dim result As StringBuilder
			Dim str As String
			If input.Length = 0 Then str=""
			If input.Length = 1 Then str=input(0)
			result.Initialize
			result.Append(input(0))
			For i=1 To input.Length-1
				result.Append(input(i))
			Next
			str=result.ToString
			Dim Output As String
			Dim p,c As Int
			For x=0 To str.Length-1
				For y=x+1 To x+str.Length-1
					c=0
					Output=str.CharAt(x)
					Do While Output.Length<counter
						p=(y+c) Mod str.Length
						If p<>x Then Output=Output & str.CharAt(p)
						c=c+1
					Loop
					Log(Output) 'خروجی
				Next
			Next
		End If
	Next
End Sub

و به این شکل استفاده کنین:

Dim inputs() As String = Array As String("A","B","C")
Permutation(inputs)
لینک ارسال
به اشتراک گذاری در سایت های دیگر

13 ساعت قبل، امیرحسین قاسمی گفته است:

سلام

این تابع رو اضافه کنین:

Sub Permutation(input() As String)
	For counter=1 To input.Length
		If counter=1 Then
			For u=0 To input.Length-1
				Log(input(u)) 'خروجی تک عضوی ها
			Next
		Else
			Dim result As StringBuilder
			Dim str As String
			If input.Length = 0 Then str=""
			If input.Length = 1 Then str=input(0)
			result.Initialize
			result.Append(input(0))
			For i=1 To input.Length-1
				result.Append(input(i))
			Next
			str=result.ToString
			Dim Output As String
			Dim p,c As Int
			For x=0 To str.Length-1
				For y=x+1 To x+str.Length-1
					c=0
					Output=str.CharAt(x)
					Do While Output.Length<counter
						p=(y+c) Mod str.Length
						If p<>x Then Output=Output & str.CharAt(p)
						c=c+1
					Loop
					Log(Output) 'خروجی
				Next
			Next
		End If
	Next
End Sub

و به این شکل استفاده کنین:

Dim inputs() As String = Array As String("A","B","C")
Permutation(inputs)

ظاهرا کدها مشکل دارن وقتی بجای حروف از کلمه استفاده کنم کلا یک خروجی دیگه ای میده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

3 دقیقه قبل، DexterFstone گفته است:

ظاهرا کدها مشکل دارن وقتی بجای حروف از کلمه استفاده کنم کلا یک خروجی دیگه ای میده

خب من این تابع رو فقط برای عضوهای تک حرفی نوشتم!

لطفا یه مثال هم از کلمات بزنین که میخواین خروجی به چه صورت باشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...