第1个回答 2010-03-03
我个人意见
1. n个人编号,n个座位也编号 是一个递归问题,可以这样解
if (n == 1)
return 1;
return n * Posit(n-1);
2. "如果每个人坐的座位编号与自己的编号不同"的反面,就是有不少于一个相同的座号。 这是一个组合问题。也可以由递归解
if (n == 0)
return 1;
return 2 * Person(n-1);
那么显然解法就是
Num = Posit(n) - [Person(n) - 1];
// - 1 是因为Person(n)中包含一个全为零项
3. 这两个问题合起来,用一个递归,实在想不出来。这里抛砖引玉,期待精彩回复。