怎么写
某天买了非常多的糖果并把它们分成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 ); }