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 

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

解析zzz

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

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

结果ing

C语言小程序之没事跑跑步_第1张图片
图片发自App

你可能感兴趣的:(C语言小程序之没事跑跑步)