在 C++ 中,如何将项目放置在 n^2 个位置,使得每行每列最多只有一个项目


在这个问题中,我们给定一个整数 n,表示垂直方向和水平方向各有 n 条线,这些线相交形成 n2 个交点。我们的任务是找到将 4 个项目放置在这些交点上的总方法数,

并且要求每行每列最多只能放置一个项目。

让我们举个例子来理解这个问题,

输入

n=4

输出

24

解释

为了解决这个问题,我们需要从 n 条水平线中选择 4 条来放置项目,这可以通过 nC4 来计算。现在,每条水平线都有 n 条垂直线,因此在第一条选择的水平线上放置项目有 n 种方法。然后,我们移动到下一条选择的水平线,那里将有 n-1 种可能的放置方式。以此类推,第三个可以在 n-2 种方式中放置,第四个可以在 n-3 种方式中放置。因此,总方法数将是 nC4*n*(n-1)*(n-2)*(n-3)

程序展示算法的实现,

示例

 在线演示

#include <iostream>
using namespace std;
long long placeItems(int n) {
   return (1LL * (1LL *
   ((n) * (n - 1) * (n - 2) * (n - 3)) / (4 * 3 * 2 * 1)) *
   ((1LL * (n) * (n - 1) * (n - 2) * (n - 3))));
}
int main() {
   int n = 4;
   cout<<"The number of way is which 4 items can be placed in the intersection of "<<n;
   cout<<" lines vertically and horizotally are "<<placeItems(n);
   return 0;
}

输出

The number of way is which 4 items can be placed in the intersection of 4 lines vertically and horizotally are 24

更新于: 2020-07-17

63 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告