C语言小程序之没事跑跑步

题目

有N个人参加100米短跑比赛, 跑道为8条。程序的任务是按照尽量使每组的人数相差最少的原则分组。

例如:
N=8时,分成1组:8人即可。
N=9时,分成2组:一组5人,一组4人。
N=25时,分4组:7、6、6、6。

请编程计算分组数字, 要求从键盘输入一个正整数(1~100之间, 不必考虑输入错误的情况)表示参赛的人数。
程序输出每个组的人数, 从大到小顺序输出, 每个数字一行。


分析

根据举的例子不难分析, 当人数超过8时分两组, 超过16时分三组, 超过24时分四组。。。
分组数应该是和人数除以8的结果有关。

确定分组数之后, 按照每组人数相差最少来分组,5 4, 7 6 6, 大概可以看出来个所以然(* ̄m ̄)

分组数

当人数被8整除时, 分组数为n/8
当人数不被8整除时, 分组数为n/8+1
即:

// 计算分组数
int zu = num/arr+(num%arr!=0);

上吧for!

#include <stdio.h>

int main()
{
    // 人数 跑道数
    int num, arr = 8;
    scanf("%d", &num);
    
    // 计算分组数
    int zu = num/arr+(num%arr!=0);
    
    // 计算每组人数
    int shu = num/zu;
    
    // 输出每组人数
    for(int i=0; i<zu; i++)
    {
        // 前几组人数+1
        if(i<num%zu)
             printf("%d\n", shu+1);
         else
             printf("%d\n", shu);
    }
}

解析zzz

重点在最后输出的for/if里, 根据规则:

  • 当人数是8的倍数时, 每组人数是n/zu是毋庸置疑的
  • 当人数不是8的倍数是, 前几组人数是n/zu+1, 后几组人数是n/zu

结果ing

图片发自简书App
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容