排列组合:从1-30个正整数中任意选取3个数,使得选取的3个数的和能被3整除,问有多少种取法?

排列组合:从1-30个正整数中任意选取3个数,使得选取的3个数的和能被3整除,问有多少种取法?请给出解题过程,多谢。

三个数的和能被3整除,有如下情况:
一、余数分别为0、0、0
二、余数分别为1、1、1
三、余数分别为2、2、2
四、余数分别为0、1、2
第一种情况:在能被3整除的数中选3个,因为共有10个,所以为10个中选3个的方法,有(10*9*8)/(3*2*1)=120种;
第二种情况:在被3除余1的数中选3个,共有10个,同上,有120种选择方法;
第三种情况:在被3除余2的数中选3个,共有10个,同上,有120种选择方法;
第四种情况:在被3整除的数中选1个,在被3除余1的数中选1个,在被3除余2的数中选1个,方法有10*10*10=1000种。
所以共计1000+120+120+120=1360种。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-09-22
这些数里能被3整除的数有30/3=10个
①若所选的3个数中只有一个能被3整除,
那么另两个数一定是除3余1,和除3余2.那么1到33中的除3余1的数有10个,除3余2的数也有10个.
则在此情况下,分别是3个含有10个元素的数集合的组合.有10^3=1000;
②若所选的3个数都能被3整除,
那么就是8+7+6+5+4+3+2+1=36[算法是首尾相加*4]
③若所选的3个数都除3余1的话,
则同上是在10个数中的组合同上共36种取法。
所以一共有的取法数目是1000+36+36=1072。
[以上是在所取3个数中没有重复选取(一个数选两次或者3次)的情况!]
若有重复选取则:
第①种情况不变;
第②种情况可重复选取,
那么:应为10^3=1000;
第②种情况亦可重复选取,
那么:应为10^3=1000;
所以,如果可以在同一次选取中重复选取同一个数的话,则有3000种选取方法:如果不能在同一次选取中重复选取同一个数的话则有1072种选取方法。
到底能不能在同一次选取中重复选取同一个数呢,这就要请教出题人了。不过方法是绝对的。
第2个回答  2006-09-22
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;

int main(int argc, char *argv[])
{

int i,j,k,a;
a=0;
i=1;
while (i<=28)
{
for(j=i+1;j<=29;j++)
{
for(k=j+1;k<=30;k++)
{
if((i+j+k)%3==0) a++;
}
}
i++;
}
cout<<a<<endl;
getch();

return 0;
}

output:
1360
相似回答