糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > CMN题目描述

CMN题目描述

时间:2022-09-08 07:54:37

相关推荐

CMN题目描述

1、CMN题目描述

排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。

现要求你不用递归的方法输出所有组合。

例如n=5,r=3,所有组合为:

l 2 3l 2 4 1 2 5 l 3 4 l 3 5 1 4 5 2 3 4 2 3 5 24 5 3 4 5

输入输出格式

输入格式:

一行两个自然数n、r(1<n<21,1<=r<=n)。

输出格式:

所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。

**注意哦!输出时,每个数字需要3个场宽,pascal可以这样:

write(ans:3);

输入输出样例

输入样例#1:

5 3

输出样例#1:

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

代码如下:

#include <bits/stdc++.h>//万能头文件

using namespace std;

int total=0;

int a[50]; //a数组存每一次选的数

bool b[50];

int n,r;

void print(){ //打印函数

for(int i=1; i<=r; i++)

cout<<setw(3)<<a[i];//定义场宽为3,直接输出只能得10分

cout<<endl;

}

void search(int t)//搜索函数

{

int i;

if(t>r) { //如果搜完了就输出a数组

print();

return;

}

for(int i=1; i<=n; i++){ //枚举每一个数

if(!b[i]&&i>a[t-1]||t==1)//当i木有被使用过且i必须大于前个数但除1之外

{

a[t]=i; //将i存入a数组

b[i]=true;//标记i已被使用

search(t+1);//继续搜索

a[t]=0;//回溯一步

b[i]=false;

}

}

}

int main(){

cin>>n>>r;//输入

search(1);

return 0;

}

如果觉得《CMN题目描述》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。