C语言蓝桥杯一道题求解

有N个人参加100米短跑比赛。跑道为8条。程序的任务是按照尽量使每组的人数相差最少的原则分组。例如:N=8时,分成1组即可。N=9时,分成2组:一组5人,一组4人。N=2... 有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
展开
 我来答
cpucash
2014-02-12 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:968万
展开全部
也就是多一人少一人的问题
先算出几组,
再算出每组的平均人数,这样有个余数
按余数打印多出一人的分组,组数为余数,人数为平均数加1
接着打印总组数减去余数的的组,人数为平均数

如25人,那么25/8=3,是四组,这里判断人数是否被8整除,不整除,组数加1
整除,则直接打印组员人数即可,循环次数为人数除以8

接着算平均数25/4=6
余数25%4=1,那么有1组人数为6+1
其余4-1组我6人
这样程序很好做了吧

int ren,zu,yu,ping;
scanf("%d",&ren);
if(ren%8==0)
{
zu=ren/8;
for(i=0;i<zu;i++)
printf("%d\n",8);

}
else
{
zu=ren/8+1;
ping=ren/zu;
yu=ren%zu;
for(i=0;i<yu;i++)
printf("%d\n",ping+1);
for(i=0;i<zu-yu;i++)
printf("%d\n",ping);
}
xoaxa
2014-02-11 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3470万
展开全部
#include<stdio.h>

struct grouping {
int members;
int remainder;
};

void Sort(struct grouping g[],int n) {
int i,j,k;
struct grouping t;
for(i = 0; i < n - 1; ++i) {
k = i;
for(j = i + 1; j < n; ++j) {
if(g[k].remainder > g[j].remainder) k = j;
}
if(k != i) {
t = g[k];
g[k] = g[i];
g[i] = t;
}
}
}
 
int main() {
int n,i,k,base,remainder;
struct grouping g[5];
while(scanf("%d",&n) == 1 && n) {
if(n <= 8) {
printf("01组 %d人。\n\n",n);
continue;
}
for(i = 0; i < 5; ++i) {
g[i].remainder = n % (8 - i);
g[i].members = 8 - i;
}
Sort(g,5);
k = (g[0].remainder) ? 1 : 0;
base = g[k].members;
remainder = g[k].remainder;
for(i = 0; i < n/base; ++i) {
if(remainder) {
printf("%02d组 %d\n",i + 1,base + 1);
--remainder;
}
else printf("%02d组 %d\n",i + 1,base);
}
printf("\n");
}
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
奔跑的小风
2014-02-11 · TA获得超过204个赞
知道答主
回答量:29
采纳率:0%
帮助的人:26.5万
展开全部
#include<stdio.h>
int main()
{
 int S_person,group,t1,t2,i;
 scanf("%d",&S_person);
 if(S_person%8==0)//如果刚好每组8人,可以分完
 {
   group=S_person/8;
   for(i=0;i<group;i++)
    printf("%d\n",S_person/group);
 }
 else           //如果每组八人,不能分完
 {
   group=S_person/8+1;
   t1=S_person/group;
   t2=S_person%group;
   for(i=0;i<t2;i++)
    printf("%d\n",t1+1);
   for(i=0;i<group-t2;i++)
    printf("%d\n",t1);
 }
 return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
babyzgm
2014-02-11 · TA获得超过143个赞
知道答主
回答量:91
采纳率:0%
帮助的人:72.5万
展开全部
9 为什么不是 3 3 3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式