本文目錄一覽:
- 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;
}
原創文章,作者:AYYHN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329513.html