-1
私はこのコードをC#に変換したいが、何かが間違っている。私は指針でそれをしたくなかった。すぐに改善する方法を誰かが知ることができますか?これは、最小転置数によって全ての置換を生成することである。これは私が変換したいコードです。 a link。新しい配列を作成しませんint[] I = P;
:最小転置番号ですべての置換を生成するC - > C#
namespace Algorytm8
{
class Program
{
private int[] P;
private int count, n;
public int silnia(int n) {
return (n == 1 || n == 0) ? 1: silnia(n-1) * n;
}
public void swap(int i, int j)
{
int pom;
pom = P[i];
P[i] = P[j];
P[j] = pom;
}
public int b(int m, int i)
{
if ((m % 2 == 0) && (m > 2))
{
if (i < m - 1)
{
return i;
}
else
{
return m - 2;
}
}
else
{
return m - 1;
}
}
public void perm(int m)
{
int Mi;
int[] I = P;
for (int i = 1; i <= m; i++)
{
I[i] = 1;
}
Mi = 1;
while (count < silnia(m))
{
if (I[Mi]==Mi)
{
if (I[Mi]==1 && Mi==1)
{
count++;
Console.Write(count);
for (int i = 1; i <= n; i++)
{
Console.Write(P[i]);
}
Console.Write("\n");
}
for (int i = 1; i <= Mi; i++)
{
I[i] = 1;
}
Mi++;
}
if (I[Mi] < Mi)
{
int i = I[Mi];
swap(b(Mi, i), Mi);
I[Mi]++;
Mi = 1;
}
}
}
public void getData()
{
Console.WriteLine("Podaj ilość elementów: ");
int n = Int32.Parse(Console.ReadLine());
P = new int[n];
for (int i = 0; i < n; i++)
{
P[i] = i + 1;
}
perm(n - 1);
}
static void Main(string[] args)
{
Program p = new Program();
p.getData();
Console.ReadKey();
}
}
}
何が問題になりますか? – NetMage
悪い値は私を列挙します –
それからデバッガーをとり、それをデバッグしてください。 – zerkms