蓝桥杯-运动员分组

来源:互联网 发布:淘宝店铺代码 编辑:程序博客网 时间:2024/04/28 08:41
  • 题目

有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

  • 代码
    这是最开始的想法,太复杂了。
import java.util.Scanner;public class Grouping {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int N = sc.nextInt();        if(N<=8)            System.out.println(N);        else if(N<=16) {            System.out.println(N%2==0 ? N/2 :N/2+1);            System.out.println(N/2);        } else {            if(N%8==0) {                for(int i=0;i<N/8;i++) {                    System.out.println(8);                }            } else {                for(int j=7;j>=6;j--) {                    int s = N/j;                    int y = N%j;                    if(y==0) {                        for(int i=0;i<s;i++)                            System.out.println(j);                        return ;                    } else {                        if(s>y) {                            for(int i=0;i<y;i++)                                 System.out.println(j+1);                            for(int i=0;i<s-y;i++)                                 System.out.println(j);                            return ;                        }                    }                }            }        }    }}

提炼分析后,在

import java.util.Scanner;public class Grouping {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int N = sc.nextInt();        //组数        int group = N%8==0 ? N/8 : N/8+1;        //每组基础人数        int n = N/group;        //剩余人数        int rest = N - n*group;        for(int i=0;i<group;i++)             System.out.println(i<rest?n+1:n);    }}

总是喜欢写一个python的,

N = int(raw_input())group = N/8 if N%8==0 else N/8+1n = N/grouprest = N - group*n for x in xrange(group):    print n+1 if x<rest else n
0 0