好難的數學題目~幫解!

2007-05-28 5:53 am
設0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7

共有16個數字,其中任取4個數作為4位數字,則共有幾個?

拜託 給我詳解~

回答 (4)

2007-05-28 6:37 pm
✔ 最佳答案
設0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7

共有16個數字,其中任取4個數作為4位數字,則共有幾個?


【答】:這題要分成三大部分來討論~討論如下:

(1)二同二同:

(i)不含"0"者:C 7取2 * 4!/2!*2!=126,

(i)含"0"者:C 7取1 *〔4!/2!*2!-3!/2!〕=21

(2)二同二異:

(i)不含"0"者:C 7取1 *C 6取2 *4!/2!=1260

(ii)含1個"0"者:C 7取1 * C 6取1 *〔4!/2!-3!/2!〕=378

(iii)含2個"0"者:C 7取2 *〔4!/2!-3!〕=126

(3)四異:

(i)不含"0"者:C 7取4 * 4!=840

(ii)含"0"者: C 7取3 *〔4!-3!〕=630

由(1)(2)(3)知道共有:〔126+21〕+〔1260+378+126〕+〔840+630〕=3381


以上是我的作法以及想法~不知道你能不能接受這樣的算法!

如有錯誤請指教!!
參考: 自己
2007-05-28 8:04 am
總計3381個

int main(int argc, char* argv[]){
int ct[8],fg,s=0;
for( int j=0;j<=7;j++) ct[j]=0;

for( int i1=1; i1<=7 ; i1++)
{
ct[i1]++;
for( int i2=0; i2<=7 ; i2++ )
{
ct[i2]++;
for( int i3=0 ; i3<=7 ; i3++ )
{
ct[i3]++;
for( int i4=0 ; i4<=7 ; i4++ )
{
ct[i4]++;

for( fg=1,j=0 ; j<=7 ; j++ )
if( ct[j]>=3 ) fg=0;
if( fg ) printf("%d:%d%d%d%d\n",++s,i1,i2,i3,i4);

ct[i4]--;
}
ct[i3]--;
}
ct[i2]--;
}
ct[i1]--;
}
return 0;
}
參考: self
2007-05-28 7:20 am
答案應該在 3297 左右(第三位起乘的不是 8)
 全不同 + 有1組同 + 有2組同
= (7*7*6*5)
+ 〔8*1*7*6 *排列(3!) - 1*7*6*5(第一位選0,沒人選0) - 1*1*7*6(第一位選0,有人重覆0)*3(誰重覆)〕
+ 8*1*7*1 * 3(只有3種二組同法) - 1*1*7*1(第一位選了0) * 3(同前)
= 1470 + (2016-210-126) + (168-21)
= 1470 + 1680 + 147
= 3297
2007-05-28 6:25 am
用程式計算後,答案是:3584 個。
千位數只能有 7 個
百位、十位、個位各有 8 個。
所以 7 * 8 * 8 * 8 = 3584
//Power by Visual Studio 2005
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[]){
//==========START==========//
char nStr[5]={'\0'};
int i,j,k,l,counter=0;
for(i=0;i<7;i++){
nStr[0]=(i+1)+48;
for(j=0;j<8;j++){
nStr[1]=j+48;
for(k=0;k<8;k++){
nStr[2]=k+48;
for(l=0;l<8;l++){
nStr[3]=l+48;
printf(" %s",nStr);
counter++;
}
printf("\n");
}
}
}
printf("Ans= %d\n",counter);
//==========END==========//
system("PAUSE");
return 0;
}

2007-05-28 16:01:28 補充:
>_<||| 小綿羊的答案是錯的~

小綿羊忘了扣掉重複的數字!


收錄日期: 2021-04-27 17:14:47
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070527000015KK09787

檢視 Wayback Machine 備份