// 階乘
int fact(int n)
{
int r = 1;
for (int m = 1; m <= n; m++)
r *= m;
return r;
}
// 計算指定陣列的排列方式數量
// 注意重復數字
// 應當為:全不同情況下總數量階乘/重疊數量的階乘
int st(int* v, int n)
{
int* nb = new int[n];
for (int i = 0; i < n; i++)
nb[i] = 1;
for (int i = 0; i < n; i++)
{
for (int m = 0; m < i; m++)
{
if (v[i] == v[m])
{
nb[m]++;
break;
}
}
}
int r= fact(n) ;
for (int i = 0; i < n; i++)
if (nb[i] != 1)
r /= fact(nb[i]);
return r;
}
// 從f-t范圍內選取n個數,使其和值為v,可重復選取
// 求其各組合
int sn(int f, int t, int n, int v, int* cm, int cmsize, int* cm_r)
{
RN_++;
if (n==0)
{
if (v == 0)
{
int nst = st(cm, cmsize); // 發現組合,求組合的可能排列方式
*cm_r += nst;
return 1;
}
return 0;
}
if (f > t) return 0;
if (f > v) return 0;
int a = f, ae = f + t/n;
int r = 0;
for (; a <= ae; a++)
{
cm[cmsize-n] = a;
r += sn(a , t, n - 1, v - a, cm, cmsize, cm_r);
}
return r;
}
int ma()
{
int cm[10] = {0}, cm_r = 0;
int r = sn(0, 24, 10, 24, cm, 10, &cm_r);
return cm_r;
}
// 階乘
int fact(int n)
{
int r = 1;
for (int m = 1; m <= n; m++)
r *= m;
return r;
}
// 計算指定陣列的排列方式數量
// 注意重復數字
// 應當為:全不同情況下總數量階乘/重疊數量的階乘
int st(int* v, int n)
{
int* nb = new int[n];
for (int i = 0; i < n; i++)
nb[i] = 1;
for (int i = 0; i < n; i++)
{
for (int m = 0; m < i; m++)
{
if (v[i] == v[m])
{
nb[m]++;
break;
}
}
}
int r= fact(n) ;
for (int i = 0; i < n; i++)
if (nb[i] != 1)
r /= fact(nb[i]);
return r;
}
// 從f-t范圍內選取n個數,使其和值為v,可重復選取
// 求其各組合
int sn(int f, int t, int n, int v, int* cm, int cmsize, int* cm_r)
{
RN_++;
if (n==0)
{
if (v == 0)
{
int nst = st(cm, cmsize); // 發現組合,求組合的可能排列方式
*cm_r += nst;
return 1;
}
return 0;
}
if (f > t) return 0;
if (f > v) return 0;
int a = f, ae = f + t/n;
int r = 0;
for (; a <= ae; a++)
{
cm[cmsize-n] = a;
r += sn(a , t, n - 1, v - a, cm, cmsize, cm_r);
}
return r;
}
int ma()
{
int cm[10] = {0}, cm_r = 0;
int r = sn(0, 24, 10, 24, cm, 10, &cm_r);
return cm_r;
}
我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......