您的位置:首页 > 理论基础 > 数据结构算法

排列组合问题

2018-03-31 11:34 246 查看

排列组合A(n,m)

A(n,m);

n>=m

测试样例:

输入:

6

3

输出:

123 124 125 126 132 134 135 136 142 143

145 146 152 153 154 156 162 163 164 165

213 214 215 216 231 234 235 236 241 243

245 246 251 253 254 256 261 263 264 265

312 314 315 316 321 324 325 326 341 342

345 346 351 352 354 356 361 362 364 365

412 413 415 416 421 423 425 426 431 432

435 436 451 452 453 456 461 462 463 465

512 513 514 516 521 523 524 526 531 532

534 536 541 542 543 546 561 562 563 564

612 613 614 615 621 623 624 625 631 632

634 635 641 642 643 645 651 652 653 654

120

代码如下:

#include <stdio.h>
int m,n,a[30];
long s=0;
int main(){
int p(int k);
//输入A(n,m)的值 n>=m
scanf("%d",&n);
scanf("%d",&m);
p(1);
printf("\n");
printf("%ld",s);
return 0;
}
int p(int k)
{
int i,j,u;
if(k<=m)
{
for(i=1;i<=n;i++)
{
a[k]=i;
for(u=0,j=1;j<=k-1;j++){
if(a[k]==a[j])
u=1;
}
if(u==0){
if(k==m){
s++;
printf(" ");
for(j=1;j<=m;j++)
printf("%d",a[j]);
if(s%10==0)
printf("\n");
}else{
p(k+1);
}
}
}
}
return s;
}
/*效率有点慢,A(11,10) 需要八秒*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息