码迷,mamicode.com
首页 > 其他好文 > 详细

【TOJ 5276】圆内交点

时间:2018-05-17 16:00:55      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:第一个   ott   连线   lse   多少   div   语言   i++   roman   

描述

现在有一个很大的圆,圆周上有N个互不重合的点,让这N个点两两连线,问连线有多少条,这些连线在圆的内部有多少个交点。

技术分享图片

输入

多组输入,每行输入一个数字表示N(1 ≤ N ≤ 100); 

输出

输出两个数字,第一个数字表示连线的条数,第二个数字表示园内交点的个数。 

样例输入

2
4

样例输出

1 0
6 1

#include<bits/stdc++.h>
double lncom(int n,int m)     //在c语言中,log函数也就是我们通常所说的ln函数,即以e为底的对数函数
{
    double s1=0,s2=0,i;       //s1=n!/m!  s2=1/(n-m)!

    if(m<n/2.0)m=n-m;         //如果上标小于下标的一半,此时m<n-m,令m=n-m,使计算更加快捷

    for(i=m+1;i<=n;i++)       //s1作为分子,从m+1累乘至n
    s1=s1+log(i);

    for(i=2;i<=n-m;i++)       //s2作为分母,从1累乘至n-m
    s2=s2+log(i);

    return s1-s2;
}
double com(int n,int m)
{
    if(n<m)return 0;          //因为n≥m,所以这种情况不存在

    return exp(lncom(n,m));   //把经过处理的组合数还原出来
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==1)
            printf("0 0\n");
        else if(n==2)
            printf("1 0\n");
        else if(n==3)
            printf("3 0\n");
        else printf("%.0f %.0f\n",com(n,2),com(n,4));
    }
    return 0;
}

【TOJ 5276】圆内交点

标签:第一个   ott   连线   lse   多少   div   语言   i++   roman   

原文地址:https://www.cnblogs.com/kannyi/p/9051459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!