本文目录一览:
- 1、c语言 现有n个队员,分成m组,要求每组之间人数差最少
- 2、C语言程序:有两只队伍比赛羽毛球,各派4名队员
- 3、C语言 分组(数字分组)
- 4、m个人分成n组,要求每组最少一个人,如何用C语言编程求所有可能的解?
- 5、c语言 m人分成n组 每组至少一人 有多少种解 求现成程序
c语言 现有n个队员,分成m组,要求每组之间人数差最少
#include stdio.h
int main()
{
int m,n;
int i, a,b;
scanf("%d%d", n, m);
if(n%m==0)
{
a=n/m;
printf("每组%d人\n", a);
}
else
{
a=n%m;
b=n/m+1;
printf("%d人%d组, 加 %d人%d组\n", b,a,b-1,m-a);
}
return 0;
}
C语言程序:有两只队伍比赛羽毛球,各派4名队员
找到了!
#includestdio.h
int main()
{
char a,b,c,d; //对应4个人a b c d
for(a='w';a='z';a++) //对手可能是wxyz中的任意一人,所以4个数都要检查
for(b='w';b='z';b++)//同上
for(c='w';c='z';c++)//同上
for( d='w';d='z';d++ )
if ( a!=b b!=c c!=d d!=a b!=d a!=c ) //两个人不能有相同的对手
if(a!='w'b!='w'b!='x' c!='z' ) //A不用W比赛,B不与W,X比赛,C不与Z比赛
printf("A--%c B--%c C--%c D--%c\n",a,b,c,d); //满足条件,输出对手
return 0;
}
C语言 分组(数字分组)
void Test(int n)
{
for (int i = 1; i = 50; ++i)
{
cout i ;
if (i % n == 0)
cout endl ;
else
cout ", " ;
}
}
m个人分成n组,要求每组最少一个人,如何用C语言编程求所有可能的解?
数学上可以用排列组合的方法,隔板法来求解,前提是人之间没有差别,如果人数大于分组数,那么就相当于将n-1个隔板插进m-1个人之间,解的个数用排列组合的C运算来求,比如说三个人分两组,那么解的个数为2X1/1=2,如果五个人分三组,那么解的个数为5X4X3/(3X2X1)=10;
如果用程序实现,可以采用递归调用加指针,我的算法有点麻烦,可能还有更简单的:
#include "stdafx.h"
int m,n;
int *a;
int *ini;
void main()
{
void allocate(int q,int r);
while(true)
{
scanf("%d",m);
scanf("%d",n);
if(m=n)
{
break;
}
else
{
printf("请重新输入\n");
}
}
a = (int*)malloc(n*sizeof(int));
ini=a;
for(int i=0;in;i++)
{
*(a++)=1;
}
a=ini;
allocate(0,n);
}
void allocate(int q,int r)
{
int sum=0;
int next;
if(q=r)
{
q=r-1;
a=ini;
for(int j=0;jr;j++)
{
sum=sum+*a++;
}
if(sum==m)
{
a=ini;
for(int k=0;kr;k++)
{
if(k!=(r-1))
{
printf("%d ",*a++);
}
else
{
printf("%d\n",*a++);
}
}
}
return;
}
else
{
for(int i=0;i=(m-n);i++)
{
a=ini;
a[q]=i+1;
next=q+1;
allocate(next,r);
}
}
return;
}
因为用了malloc,所以头文件中需要加入malloc.h,程序在VS2010下运行。
结果截图:
三人两组
五人三组
七人三组
这个是楼主要的答案吗?
c语言 m人分成n组 每组至少一人 有多少种解 求现成程序
#includestdio.h
long long s[1000][1000];
long long divide(int n,int m)//n人分成m组
{
long long i,j;
for(i=1;i=n;i++)
{
s[i][1]=1,s[i][i]=1;
for(j=2;ji;j++)
s[i][j]=s[i - 1][j - 1] + j * s[i - 1][j];
}
return s[n][m];
}
int main()
{
int m,n;
scanf("%d%d",m,n);
printf("%lld",divide(m,n));
return 0;
}