有N個人參加100米短跑比賽。跑道爲8條。程序的任務是按照儘量使每組的人數相差最少的原則分組。
例如:
N=8時,分成1組即可。
N=9時,分成2組:一組5人,一組4人。
N=25時,分4組:7、6、6、6。
請編程計算分組數字。要求從鍵盤輸入一個正整數(1~100之間,不必考慮輸入錯誤的情況),
表示參賽的人數。程序輸出每個組的人數。從大到小順序輸出,每個數字一行。
比如,用戶輸入:25
程序輸出:
7
6
6
6
解題思路:定義變量,n個人,分x組,t是餘數,v平均數,a[i]存放平均數
分情況討論,如果n<=8,那肯定的一組。如果n>8,先用總人數/8求出組數x,n%8求出餘數,這裏還要考慮如果餘數不爲0,則組數要+1。題目要求的是人數相差最少的分組,那首先想到的是平均數吧?那就求一下平均數v=n/x。這時候平均數有了,就差把平均值存起來輸出了,在輸出前還要考慮一個問題,餘數是幾就要有幾個數+1。
代碼實現:
#include<stdio.h>
int main()
{
int n,x,t,v,i,a[10];
scanf("%d",&n);
if(n<=8)
printf("1");
else
{
x=n/8;
t=n%8;
if(t!=0)
++x;
v=n/x;
for(i=1;i<=x;i++)
{
a[i]=v;
if(i<=t)
a[i]+=1;
printf("%d\n",a[i]);
}
}
}