题目如下:
原题

用递归的方法写的代码如下:

#include <stdio.h>
long long zhs(int n, int r)
{
  if (r == 1)
  {
    return n;
  }
  long long t = zhs(n, r - 1)*(n - r + 1) / r;
  return t;
}
int main()
{
  int n, r;   //5   3
  while (scanf("%d %d", &n, &r))   //  5   3
  {
    if(n==0 & r ==0)
    {
      break;
    }
    if (n < r)
    {
      printf("error!\n");
      continue;
    }
    if (r == n || r == 0)  //忽略的一点。。。。。。。因为这里一直wa
    {
      printf("1\n");
      continue;
    }
    else
      printf("%lld\n", zhs(n, r));
  }
  return 0;
}

不用递归也可以实现,如下:

#include <stdio.h>
int main()
{
  int n, r;   //5   3
  while (scanf("%d %d", &n, &r))   //  5   3
  {
    if(n==0 & r ==0)
    {
      break;
    }
    if (n < r)
    {
      printf("error!\n");
      continue;
    }
    long long ans = 1;
    if (r == n || r == 0)   //此处注意注意
    {
      printf("1\n");
      continue;
    }
    else
      /*printf("%lld\n", zhs(n, r));*/
    {
      for (int i = r,j=1; i >= 1; i--,j++)
      {
        ans *= n;
        n--;
        ans /= j;
      }
    }
    printf("%lld\n", ans);
  }
  return 0;
}

主要是之前没有考虑到r=0的情况,所以卡了很久。

最后修改:2019 年 02 月 27 日
如果觉得我的文章对你有用,请随意赞赏