c语言 跪求:输入M个数从中取N个数进行组合并输出所有组合项

作者&投稿:长孙劳 (若有异议请与网页底部的电邮联系)
编写c语言函数计算从n个元素中取m个元素的组合数C(m,n);要求:输入n和m为整型,m<=n,用~

#include int ifac(int n);int nCr(int n, int r);int main(void) { int a, b, result; printf("Input two numbers: "); scanf("%d%d", &a, &b); result = nCr(a, b); if (result == 0) printf("Wrong!
"); else printf("%d
", result); return 0;}int ifac(int n) { int result = 1; while (n > 1) result *= n--; return result;}int nCr(int n, int r) { if (n < r || n <= 0 || r <= 0) return 0; return ifac(n) / (ifac(r) * ifac(n - r));}

#include

#define MAX 4
#define SUB 2

int num[MAX] = { 1, 2, 3, 4 };
int mul = 1;
int total = 0;

void GetMul(int n, int s)
{
if (s == SUB)
{
printf("One Product is %d.
", mul);
total += mul;
return;
}
else
{
if (n < MAX)
{
mul = mul*num[n];
GetMul(n+1, s+1);
mul = mul/num[n];
GetMul(n+1, s);
}
}
}

void main(void)
{
GetMul(0, 0);
printf("The Total Result is %d.
", total);
}

建议举一反三

典型的组合问题,解法有递归、回溯等等
递归法较简单,代码如下:

void combine(int a[], int n, int m, int b[], int M);

参数:
a 存放候选数字
n 总项数
m 取出项数
b 存放选出结果
M = m

#include "stdio.h"
#define MAX 100

void combine(int a[], int n, int m, int b[], int M);

int main(void)
{
int i;
int a[MAX], b[MAX];

for (i = 1; i < 100; i++)
a[i - 1] = i;

combine(a, 5, 4, b, 4);
}

void combine(int a[], int n, int m, int b[], int M)
{
int i, j;

for (i = n; i >= m; i--)
{
b[m - 1] = i - 1;
if (m > 1)
combine(a, i - 1, m - 1, b, M);
else
{
for (j = M - 1; j >= 0; j--)
printf("%d ", a[b[j]]);
printf("\n");
}
}
}

其他方法可查阅相关资料。

因为是手动输入,你就将程序简化为:输入几个数,如2,8,10,然后输出所有组合。然后给简化部分增加判断的部分,判断手动输入的那几个数是不是在第一次输入的数里边,并作出错处理!这样就简单多了

抱歉 我帮你想了一个循环的算法 但是由于你要的是手动输入提取数的个数 由于事先无法确定循环的层数 所以我搞不定 实在抱歉 但是如果N是确定话 那么就可以解决了 就是多加几层循环嵌套而已
没能帮到你 真的很遗憾

请搜索一下“C语言动态数组”或“C语言动态内存分配”


如何设计“输入m个数,求其最大值、最小值、平均数”的c程序
程序如下:include"stdio.h"void main(){int i,j,m;float a[100],t,sum=0.0,average;printf("请输入要输入数据个数m=");scanf("%d",&m);for(i=0;i<m;i++){scanf("%f",&t);a[i]=t;sum+=a[i];}average=sum\/m;for(j=0;j<m;j++)for(i=j;i<m;i++)if (a[j]>a...

c语言 计算m的n次方 要求输入m、n 输出m的n次方
include<stdio.h> void main(){ int m,n,i,sum=1;printf("请输入底数m(m>0)\\nm=");scanf("%d",&m);if(m>0){ printf("\\n请输入幂次n\\nn=");scanf("%d",&n);if(n>0){ for(i=1;i<=n;i++)sum*=m;printf("%d 的 %d 次幂等于 %d \\n",m,n,sum);} } } 已在...

C语言;while 语句 输入M个数,去除最大值和最小值,求剩余数的平均值,M...
include <stdio.h> include <conio.h> void main(){ int M,MAX,MIN,sum=0,a,ary,i=0;printf("您希望输入多少个数?");scanf("%d",&M);while(M>0){ i++;M--;printf("请输入第%d个数!",i);scanf("%d",&a);if(a>MAX||i==1)MAX=a;if(a<MIN||i==1)MIN=a;sum+=a;...

随便输入一个数字m,求从一一直加到m的和,用c语言编写?
include<stdio.h> int main(){ int m,i,sum=0;\/\/m是输入的数字;i确定循环次数;sum是结果 scanf("%d",&m);\/\/输入一个数 for(i=1;i<=m;i++){ sum +=i;\/\/求和 } printf("%d\\n",sum);\/\/输出结果 }

输入n,m和数组元素的c语言是什么?
在C语言中,如果你想输入整数n和m,以及一个包含n个元素的数组,可以使用以下代码:```c include <stdio.h> int main() { int n, m;printf("Enter the value of n: ");scanf("%d", &n);printf("Enter the value of m: ");scanf("%d", &m);int arr[n];printf("Enter %d ...

C语言、输入一个整数m,求m的n次方根,卜用数学函数``
\/\/ N>0,M>0 #include<stdio.h> #include<math.h> void main() { int m,n; double p,s; int i; printf("请输入整数m和n次方:"); scanf("%d%d",&m,&n); for(p=1.0;p<=sqrt(m);p+=0.000001) { s=1.0; for(i=0;i<n;i++) s*=p; if(m-s<1e-6)...

C语言输入M个学生N门课程的成绩,要求输出成绩单(包括每个学生的平均分及...
for(i=1;i<=m;i++) { printf("input student no%d's score\\n",i); for(j=1;j<=n;j++) { scanf("%f",*(score+i)+j); flushall(); score[0][j]+=*(*(score+i)+j); score[i][0]+=*(*(score+i)+j); } score[i][0]\/=n; } for(j=1;j<=n;j++) score[0][j]\/=m...

c语言编程 2.计算并输出 m!\/(m-n)!n!
long func(int m){ int i,sum=1;for(i=1;i<=m;i++)sum=sum*i;return sum;} main(){ int m,n;float x;printf("input m,n(m>n)");scanf("%d %d",&m,&n);if(m<0 || n<0 || m<n ){ printf("data error! ");return;} else{ x=(float)func(m)\/(func(n)*func...

C语言问题!!
include <stdio.h>int main(){int m,n,a,b,c,i; scanf("%d%d",&m,&n); for(i=m;i<=n;i++) {a=i\/100; b=i\/10%10; c=i%10; if(a+b*b+c*c*c==i)printf("%d ",i); } return 0;}

C语言中输入m,n,输出两者之前被3整除的所有偶数并求出它们的和_百度知...
include <stdio.h>#include <stdlib.h>\/* run this program using the console pauser or add your own getch, system("pause") or input loop *\/int main(int argc, char *argv[]) {int m,n,temp,result,sum=0;printf("请输入m,n:\\n");scanf("%d%d",&m,&n);if(m>n){m=temp...

曲江区19499644362: c语言 跪求:输入M个数从中取N个数进行组合并输出所有组合项 -
计虽活爽: 典型的组合问题,解法有递归、回溯等等 递归法较简单,代码如下:void combine(int a[], int n, int m, int b[], int M);参数: a 存放候选数字 n 总项数 m 取出项数 b 存放选出结果 M = m#include "stdio.h" #define MAX 100void combine(int ...

曲江区19499644362: C语言编程,题:输入M个不同的字符,从中选出N个字符,输出所有可能的方案.M,N由键盘输入.xie -
计虽活爽: #include<stdio.h> void main() { int m,n,a; double s=1; scanf("%d%d",&m,&n); a=m-n+1; for (;m>=a;m--) s=s*m; printf("%.0lf\n",s); }

曲江区19499644362: C语言问题,从m个元素抽出n个进行排列,将求阶乘的那部分做成函数,求高手过目,看看哪里错了 -
计虽活爽: #include "stdio.h"void main(){ int Anm,m,n; int JieCheng(int x); scanf("%d%d", /&#...

曲江区19499644362: 求函数.从m个数字中选取n个数作为一组.不计较顺序. 有多少种组合,分别是什么 - 技术 -
计虽活爽: {:3_166:}有个不成熟的思路[ol][*]$m-($n-1)+.....+2+1? ?[*]// 当n是2的时候有效[/ol]只供参考

曲江区19499644362: c 语言程序:从n个数中取m个数的组合数 m<n要求n定义和调用fact(i) -
计虽活爽: #include "stdio.h" int fact(int i){ if(i==1) return 1; return i*fact(i-1); } int main(void){ int n,m; while(1){ printf("Input n & m(int 0<m<n<13)...\n"); if(scanf("%d%d",&n,&m) && m>0 && n>m && n<13) break; printf("Error, redo: "); } printf("The result is %d\n",fact(n)/fact(n-m)); return 0; }

曲江区19499644362: 求指导!用C语言从N个数中任意取出M个的组合的个数,只求个数!!! -
计虽活爽: #includevoid main() { long i,j=1,m,n,a,b,c,t; //首先j在最开始赋初值,如果在for中,那每次循环都会赋值为1,这里错了 scanf("m=%d,n=%d",&m,&n); for(i=1;i<=n;i++) { j=j*i; if (i==m) a=j; if(i==n-m) //因为n-m可能与m相等,所以不能用else b=j; else t=j; } c=t/(a*b); printf("从n中选m个数的方法有%d个\n",c); } 这个算法是没错,但是容纳的数据太大就会爆掉,可以用大数乘法,但是这样就会很麻烦了

曲江区19499644362: 编写一个函求数列运算中从n个不同的数中取m个数的所有选择的个数 -
计虽活爽: C语言 递归#include<stdio.h> int test(int n,int m) { if(m<=1)return n; else return n*test(n-1,m-1)/m; } int main() { int n,m,num; while(1){ printf("请输入n,m\n"); scanf("%d%d",&n,&m); if(n==0||m==0)return 0; if(n<1||m>n){printf("数据输入错误\n");...

曲江区19499644362: C语言选数求和,从n个数里面选出来m个数,对m个数求和S,若S大于M,输入这m个数,否则不输出. -
计虽活爽: # include int main () { int m; int x; int array[7]; int i, p, q, r, k; int sum = 0; int sum1; printf("请输入要取出的个数m = "); scanf("%d", &m); /*首先定义一个数组,用来存放N个数字*/ for(i=0; i { printf("请输入第%d个元素:", i); scanf("%...

曲江区19499644362: 如何用C++实现从m个数当中选n个组合 -
计虽活爽: 不好意思,英文我看不懂,不过中文我就懂了#include #include #include #include int a[100];//a[0]...

曲江区19499644362: C语言编写:有M行字符,每行N个的个数,统计其中英文字母,数字及其他字符的个数 -
计虽活爽: #include<stdio.h>#define M 10#define N 40 main() { char string[M][N]; int i,j; int letter=0,digital=0,other=0; for(i=0;i<M;i++) { printf("请输入第%d行字符:",i+1); gets(string[i]); } for(i=0;i<M;i++) { for(j=0;string[i][j]!='\0';j++) if(string[i][j]>='a'&&string[i][...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网