会C语言的请进!急!

来源:百度知道 编辑:UC知道 时间:2024/06/17 14:27:31
这题怎么做?
Description:
Inspired by a "Little Bishops" problem, Petya now wants to solve problem for rooks.
A rook is a piece used in the game of chess which is played on a board of square grids. A rook can only move horizontally and vertically from its current position and two rooks attack each other if one is on the path of the other.
Given two numbers n and k, your job is to determine the number of ways one can put k rooks on an n × n chessboard so that no two of them are in attacking positions.
Input:
The input contains several test cases. Each case contains two integers n (1 ≤ n ≤ 12) and k (0 ≤ k ≤ n2)。
Output :
The input is terminated with n=0 and k=0.
For each case, print a line containing the total number of ways one can put the given number of rooks on a chessboard of the given size so that no two of them are in attacking positions.
Sample Input:
4 4
0 0
Sample Output:
24
要用C语言

我不知道我的理解有没有错。英文的看起来比较郁闷,如果错误的话,你就用中文讲一下大概意思。不然没法帮你
#include <stdio.h>

long P(long n,long m)
{
long p=1;
while(m!=0)
{p*=n;n--;m--;}
return p;
}
long C(long n,long m)
{
long i,c=1;
i=m;
while(i!=0)
{c*=n;n--;i--;}
while(m!=0)
{c/=m;m--;}
return c;
}

main()
{
int n,k;
while(scanf("%d%d",&n,&k) && n!=0 && k!=0)
{
if(n<k) printf("0\n");
else
{
printf("%d\n",P(n,k)*C(n,k));
}
}
}