[問題] 排列組合
小妹這兩天在寫程式作業遇到一些困難
就是可怕的排列組合
要找C n取k的一串數值的加總
我現在把排列組合寫出來了
可是無法把重複的結果刪掉
比如說C 5 取4還是會印出5!個結果
不知道要怎麼辦>"<
以下是程式碼:
#include <stdio.h>
#include <stdlib.h>
int next(int n, int current, int perm[])
{
int i, collision;
while (perm[current]++ < n)
{
collision = 0;
for (i=0; i<current; i++)
if (perm[current] == perm[i])
{
collision = 1;
break;
}
if (!collision) return 1;
}
perm[current] = 0;
return -1;
}
void main()
{
int n,k , perm[30]={0}, current=0, solCount=0, i,j;
double x[30]={0}, sum=0;
scanf("%d%d",&n,&k);
for(j=0;j<n;j++)
scanf("%lf",&x[j]);
while (current>=0)
{
current += next(n, current, perm);
if (current == n)
{
solCount++;
printf("\n%4d: ", solCount);
for (i=0; i<k; i++)
{
printf("%.3f(%d) ", x[perm[i]-1], perm[i]);
sum += x[perm[i]-1];
}
printf("sum = %.3f", sum);
current = n-1;
sum = 0;
}
}
printf("\nTotal %d permutations\n", solCount);
system("pause");
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.231.100.160
推
11/28 17:59, , 1F
11/28 17:59, 1F
→
11/28 18:43, , 2F
11/28 18:43, 2F
→
11/28 19:33, , 3F
11/28 19:33, 3F
→
11/28 22:46, , 4F
11/28 22:46, 4F
→
11/28 22:50, , 5F
11/28 22:50, 5F
推
11/28 23:27, , 6F
11/28 23:27, 6F
→
11/28 23:51, , 7F
11/28 23:51, 7F
討論串 (同標題文章)