怎么写
某天买了非常多的糖果并把它们分成N份,依次分别有1,2,3…,N个糖果。他想拿出其中的3份分给他的室友, 为了不让室友们闹意见,必须让这三份的糖果总数恰好能被三人均分。请问他一共有多少种不同的组合方案数?
程序代码:#include <stdio.h>
int main( void )
{
const unsigned n = 20;
unsigned a = (n+0)/3; // [1,n]中模除3等于0 的数目
unsigned b = (n+2)/3; // [1,n]中模除3等于1 的数目
unsigned c = (n+1)/3; // [1,n]中模除3等于2 的数目
unsigned m = 0;
// 0+0+0
if( a >= 3 )
m += a*(a-1)*(a-2)/(3*2*1);
// 1+1+1
if( b >= 3 )
m += b*(b-1)*(b-2)/(3*2*1);
// 2+2+2
if( c >= 3 )
m += c*(c-1)*(c-2)/(3*2*1);
// 0+1+2
if( a>=1 && b>=1 && c>=2 )
m += a*b*c;
printf( "f(%u) = %u\n", n, m );
}








