飞机上的座位有最大容量,也就是说一排最多可以放N个座位。现在定义一个函数public void seat(int x,int y){
}x是最多可以放多少个座位,y是需要放几个座位,要求摆放出来的座位过道数是最多的(左右空位最多)。下面是一些例子,来解释这题的目的是什么0 0 0 0 0 0 0 0 0 0     假设是x=10我用0来代表空位,1代表被安置的座位,比如y=1,那么以下方法肯定满足不了题目需求
 
1 0 0 0 0 0 0 0 0 0     把座位放到了靠窗户的位置,只有右边1个过道,所以不满足题目要求,这种方法是不对的。0 1 0 0 0 0 0 0 0 0      这么放就对了,左右两边都是空的。希望写个算法来排座,什么语言写都OK。

解决方案 »

  1.   

    是不是从x的中点开始,分别往左往右排就好?
    for example
    for (int i=(x%2==0 ? x/2 : x/2+1), j=0, k=0, k<y; k++) {
        if (k%2==0) {
            if (i-j>=0) {seat[i-j]=1;}
            else if (i+j<x) {seat[i+j]=1;}
        } else {
            if (i+j<x) {seat[i+j]=1;}
            else if (i-j>=0) {seat[i-j]=1;}
        }
    }
      

  2.   

    给你个最精简版的
    int i, n=x-y>0?x-y:0;
    for (i=0; i<Math.min(n,y); i++) System.out.print(0 + " " + 1 + " ");
    for (int j=0; j<x-2*i; j++) System.out.print((y>n?1:0) + " ");