設0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7
共有16個數字,其中任取4個數作為4位數字,則共有幾個?
拜託 給我詳解~
2007-05-27 17:53:09 · 4 個解答 · 發問者 香蔥品客 1 in 電腦與網際網路 ➔ 程式設計
設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 06:37:20 · answer #1 · answered by ? 2 · 0⤊ 0⤋
總計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;
}
2007-05-27 20:04:26 · answer #2 · answered by 1 · 0⤊ 0⤋
答案應該在 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-27 19:20:20 · answer #3 · answered by ? 7 · 0⤊ 0⤋
用程式計算後,答案是:3584 個。
千位數只能有 7 個
百位、十位、個位各有 8 個。
所以 7 * 8 * 8 * 8 = 3584
//Power by Visual Studio 2005
#include
#include
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 補充:
>_<||| 小綿羊的答案是錯的~
小綿羊忘了扣掉重複的數字!
2007-05-27 18:25:07 · answer #4 · answered by Big_John-tw 7 · 0⤊ 0⤋