因为英语小组需要分组,所以写了这个程序。
输入分组总人数和每一组的人数(注意:最后剩下不足一组的,都会被分在最后一组里面)
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int total=reader.nextInt();//分组人数
int group=reader.nextInt();//每组人数
boolean victory[]=new boolean[total];//每人都属于没有分组状态
for(int i=0;i<total;++i)
victory[i]=false;
boolean judge;//是否可以均分
if(total%group==0)
judge=true;
else
judge=false;
if(judge)
{
int remain=total;//剩下人数
int count=0;//分组计数器,人数到达
while(remain>0)
{
int random=(int)(Math.random()*total);
if(victory[random]==false)//证明生成的随机数还没有分到
{
System.out.print(random+1+" ");//加1是为了排除0
victory[random]=true;//输出了,证明分组成功了
++count;
if(count==group)//分组人数到了要求
{
count=0;//组数清空
System.out.println();//换行
}
--remain;//每次减少一个人
}
}
}
else//分组不能均分
{
int remain=total;//剩下人数
int count=0;//分组计数器,人数到达
while(remain>0)
{
int random=(int)(Math.random()*total);
if(victory[random]==false)//证明生成的随机数还没有分到
{
System.out.print(random+1+" ");//加1是为了排除0
victory[random]=true;//输出了,证明分组成功了
++count;
if(count==group)//分组人数到了要求
{
count=0;//组数清空
System.out.println();//换行
}
--remain;//每次减少一个人
if(remain<group*2 &&count==0)//人数小于2组了,而且前面也已经都分完组了
{
break;//直接跳出循环
}
}
}
}
for(int i=0;i<total;++i)
{
if(victory[i]==false)
System.out.print(i+1+" ");
}
}
}