求此题的算法,还有设计算法的一般思路方法

在生活中,我们常常会遇到某些食品商家采用一种游戏的方式提供商品的优惠券。商家在每件商品中附一张优惠券,每张券上只印一个字,商家要求消费者集齐所有字即可兑换奖励。现在我们以6个字为例,例如“经统学院加油”,并且这6个字的商品是相等数量的。那么消费者购买12件商品,能享受优惠的可能性有多大

这种相等概率的不是最好做吗?

设数组q[n],n为券的总数
初始化q[0至m]="经",q[m至2m]="统",...,q[5m至6m]="油",其中的文字也可以用数字表示,这个应该不用多说吧。
设数组flag[n],初始化flag[0至n]=0
设数组out[n]
设i=0

while(i<n)
{
r=rand(0至n) //不含n
if(flag[r]==0)
{
out[i]=q[r];
flag[r]=1;
i++;
}
}

然后保存好out,按照out顺序从0开始,卖一个少一个。

谢谢!您的思路和我们老师讲的思路一样。我们老师的解决办法是用一个unique函数,也给您分享一下。感谢啊!以后会多逛逛CSDN,向前辈学习。