站点图标 陌路寒暄

运动员分组

运动员分组

时间: 1ms        内存:128M

描述:

有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

提示:

参考答案(内存最优[920]):

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

int main()
{
    int i,n,zushu,a[100],r,yushu;

    scanf("%d",&n);
    if(n%8==0)
       {
           zushu=n/8;
        for(i=1;i<=zushu;i++)
        {
            a[i]=8;
        }
       }
       else
       {
           zushu=n/8+1;
           r=n/zushu;
           yushu=n%zushu;
           for(i=1;i<=yushu;i++)
           {
               a[i]=r+1;
           }
           for(i=yushu+1;i<=zushu;i++)
           {
               a[i]=r;
           }
       }
       for(i=1;i<=zushu;i++)
       {
           printf("%d\n",a[i]);
       }

    return 0;
}

参考答案(时间最优[0]):

#include <iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int line=(n-1)/8+1;
	int every[8]={0};
	int i;
	for(i=0;i<line;i++)
	{
		every[i]=n/line;
	}
	n%=line;
	for(i=0;i<line;i++)
	{	
		if(n-->0)
		every[i]++;
		cout<<every[i]<<endl;
	}
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

退出移动版