3428 - 被3整除的组合数(1)
时间限制 : 1 秒
内存限制 : 128 MB
从整数序列1到300中随便选出3个数,使得这3个数的和能被3整除。请问总共有多少种组合方案?
题目输入
不用输入
题目输出
直接输出结果,并换行
输入/输出样例
输入格式
输出格式
C++解答
/* 2014/11/19 吴成兵于图书馆 O157/Z782组合数学及应用P2 */ #include<iostream> #include<cmath> using namespace std; int myc(int n,int r){ if(n==r)return 1; if(n==r+1) // return myc(n,n-r); return n; int sum=1; for(int i=1;i<=r;i++) sum*=(n-i+1)/(i); // for(int i=0;i<r;i++) // sum*=(n-i)/(i+1); return sum; } int mya(int n,int r){ int sum=1; for(int i=0;i<r;i++) sum*=n-i; return sum; } int f(int n){ if(n==0)return 1; int s=n; while(--n)s*=n; return s; } int main(){ // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int n,r; // while(cin>>n&&n){//[r,n]区间 1<r<n<=~3333 {n=300; r=1;// int na=n/3,nb=n%3; int ra=(r)/3,rb=(r)%3; // cout<<"-------------\n"; // cout<<f(n)<<" "<<f(r)<<endl; // long long ll1=f(n) // cout<<myc(n,r)<<" "<<mya(n,r)<<endl; //// cout<<f(n)/f(n-r)/f(r)<<" "<<f(n)/f(n-r)<<endl; // [1,n] && n%3==0 // cout<<3*myc(na,3)+(int)pow(na,3)<<endl; // [1,n] cout<<nb*myc(na+1,3)+(3-nb)*myc(na,3)+(int)pow(na+1,nb)*(int)pow(na,3-nb)<<endl; // [r,n] int al,bl,cl;//求a,b,c长度,易错 if(rb==0&&nb==0){al=bl=na-ra;cl=na-ra+1;} if(rb==1&&nb==0){al=bl=cl=na-ra;} if(rb==2&&nb==0){al=na-ra-1;bl=cl=na-ra;} if(rb==0&&nb==1){al=na-ra+1;bl=na-ra;cl=na-ra+1;} if(rb==1&&nb==1){al=na-ra+1;bl=na-ra;cl=na-ra;} if(rb==2&&nb==1){al=bl=cl=na-ra;} if(rb==0&&nb==2){al=bl=cl=na-ra+1;} if(rb==1&&nb==2){al=bl=na-ra+1;cl=na-ra;} if(rb==2&&nb==2){al=cl=na-ra;bl=na-ra+1;} // cout<<myc(al,3)+myc(bl,3)+myc(cl,3)+al*bl*cl<<endl; // cout<<"-------------\n"; } return 0; }