描述
现在有一个很大的圆,圆周上有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; }
原文地址:https://www.cnblogs.com/kannyi/p/9051459.html
时间: 2024-11-09 00:29:46