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 展开
例如:
N=8时,分成1组即可。
N=9时,分成2组:一组5人,一组4人。
N=25时,分4组:7、6、6、6。
请编程计算分组数字。要求从键盘输入一个正整数(1~100之间,不必考虑输入错误的情况),表示参赛的人数。程序输出每个组的人数。从大到小顺序输出,每个数字一行。
比如,用户输入:25
程序输出:
7
6
6
6 展开
4个回答
展开全部
也就是多一人少一人的问题
先算出几组,
再算出每组的平均人数,这样有个余数
按余数打印多出一人的分组,组数为余数,人数为平均数加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);
}
先算出几组,
再算出每组的平均人数,这样有个余数
按余数打印多出一人的分组,组数为余数,人数为平均数加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);
}
展开全部
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
9 为什么不是 3 3 3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询