c语言编程题:有n个物品各不相同,现从中抽取t个(1<=t<=n),输出所有可能的取法 200

 我来答
冯小气气
2019-02-01 · 知道合伙人IT服务行家
冯小气气
知道合伙人IT服务行家
采纳数:98 获赞数:239
八年编程经验,公司核心技术人员。

向TA提问 私信TA
展开全部

使用递归来做。从后往前选取,选定位置i后,再在前i-1个里面选取t-1个

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void Pick(int* arr, int nLen, int m, int* out, int outLen)
{
if(m == 0)
{
for (int j = 0; j < outLen; j++)
printf("%d\t",out[j]);
printf("\n");
return;
}

for (int i = nLen; i >= m; --i)
{
out[m-1] = arr[i-1]; 
Pick(arr,i-1,m-1,out,outLen);
}
}

void PickAll(int *arr, int nLen, int m)
{
if(m > nLen)
return;

int* out = (int*)malloc(sizeof(int) * nLen);
Pick(arr,nLen,m,out,m);
free(out);
}

int main(void)
{
int buf[5]={1, 2 , 3, 4,5 };
PickAll(buf, 5, 3);
return 0;
}

fly飘呀飘
2019-02-01 · 超过43用户采纳过TA的回答
知道小有建树答主
回答量:127
采纳率:66%
帮助的人:33.8万
展开全部

#include<stdio.h>

int n;
int m;
int num = 0;
 
void comb(int *a, int h, int k, int *sub)
{
if(k == 0)
{
for(int i = 0; i < m-1; i++)
{
    printf("%d,",sub[i]);
//cout << sub[i] << ",";
}
printf("%d\n",sub[m-1]);
//cout << endl;
num ++;
}
else
{
for(int i = h-1; i >= k-1; i--)
{
sub[k-1] = a[i];
comb(a, i, k-1, sub);
}
}
}
 
int main()
{
int n;
scanf("%d%d",&n,&m);
//cin >> n >> m;
int a[100], sub[100];
for(int i = 0; i < n; i++)
{
a[i] = i+1;
}
comb(a, n, m, sub);
printf("一共有%d种方案\n",num);
//cout << num << endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GTA小鸡
高粉答主

2019-02-01 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
#include<stdio.h>
#include<stdint.h>
uint64_t fact(int n)
{
    uint64_t res = 1;
    for(int i = 1; i <= n; i++)
        res *= i;
    return res; 
}
int main()
{
    int n, t;
    scanf("%d%d", &n, &t);
    uint64_t res = fact(n)/(fact(t)*fact(n-t));
    printf("%llu", res); //msvc中使用%l64u
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鞠婧祎老婆柠祎
2019-02-01 · TA获得超过726个赞
知道小有建树答主
回答量:2416
采纳率:67%
帮助的人:406万
展开全部
#include <stdio.h> 
int i, n, m; 
double n1, m1, o1; 
printf("Enter m and n (m<=n):"); 
scanf ("%d%d",&amp;m, &amp;n); 
n1=fact(n); 
m1=fact(m); 
o1=fact(n-m); 
printf ("The result is %f" , n1/(m1*o1)); 
double fact(int n){
int i;
double product;
product = 1;
for(i=1;i<=n;i++){
 product = product * i;
}
return product;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2015052
2019-02-01 · 贡献了超过162个回答
知道答主
回答量:162
采纳率:0%
帮助的人:11.8万
展开全部
富养的女儿不贪小利,气质非凡;生活的磨砺让穷养的儿子意志更坚强;男孩子以后要走上社会,承担社会责任与家庭责任,所以要穷养以励其志,否则大手大
脚,纨绔子弟一个,如何上奉父母,下养妻儿!富养的女孩,从小会被带着出入
各种场合,增加阅世能力,等到花般年纪,再到尘世里艰难成长,便不易被各种浮华和虚荣所迷惑,一个没见过大世面的女孩,在纨绔子弟的糖衣炮弹下,很可能被花言巧语所击败。富养的女孩,因为见识多,独立,有主见,
明智,很清楚自己真正追求的东西。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式