给定的是假设 a,b,c,d 的名称列表。我想生成这些名称的秘密圣诞老人允许输出如下..
name secretsanta
a b
b d
c a
d c
注意:任何输出都是有效的,除非我们为多个名字获得相同的秘密圣诞老人,即
a->a
b->a
c->d
d->b
以上是不允许的
此外,如果我得到一个输入的正确输出并使用相同的输入再次运行它,我不应该再次得到相同的结果,即 a->b b->d c->a d->c 这不应该立即重复。只有在此后至少显示一次不同的输出后才允许重复。
以下是我尝试过的代码:
do
{
total_size=ss.santa.size();
Collections.shuffle(ss.santa);
System.out.println("Below is the list of names with their secret santas");
System.out.println("Participant Secret Santa");
Iterator<?> itr=ss.names.iterator();
while(itr.hasNext())
{
String name=(String)itr.next();
String SecretName;
do
{
int rand=r.nextInt(total_size);
SecretName=ss.santa.get(rand);
}while(name.equals(SecretName) || s.contains(SecretName) );
s.add(SecretName);
System.out.println(name+" "+SecretName);
}
s.removeAll(ss.names);
Collections.shuffle(ss.santa);
System.out.println("do you want to rerun??");
System.out.println(" 1-YES 2-NO");
choice=scn.nextInt();
}while(choice==1);