- ベストアンサー
場合の数について
「0 1 2 3 4 5 の6個の数字を用いて4桁の自然数を作るとき、得られる自然数の総和を求めなさい。」 について教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず、4桁の数ということは、千の位には0は入りません。 簡単のため、まずは千の位が1の場合について考えます。 このとき、残りの桁の3つの数字は1以外の数字を自由に使えます。 5つの数字から好きな数字を選んで並べる場合の数は5*4*3=60通りです。 つまり、千の位が1の数は全部で60個あります。千の位が2,3,4,5についても同様に60通り。 さらに百の位が1の場合は、千の位が2,3,4,5の4通り、次に十の位が残りの4通り、一の位が残りの3通りで、全部で4*4*3=48通り。 百の位が2,3,4,5についても同様。 同様にして、十、一の位が1~5の場合もそれぞれ48通り。 ところで、たとえば1023は1000+20+3という風にあらわせます。よって、今求めたい総和は、 (1+2+3+4+5)*60*1000 (千の位の値の総和) (1+2+3+4+5)*48*100 (百 〃 ) (1+2+3+4+5)*48*10 (十 〃 ) (1+2+3+4+5)*48*1 (一 〃 ) の和になります。 つまり(1+2+3+4+5)*60*1000 + (1+2+3+4+5)*48*(100+10+1)=979920 が答えのはずです。 一応、以下のプログラムを動かしても同様の答えが得られました。(言語はC++) #include <stdio.h> int main(void){ int sen,hyaku,juu,ichi,sum=0; for(sen=1;sen<=5;sen++){ for(hyaku=0;hyaku<=5;hyaku++){ if(hyaku==sen)continue; for(juu=0;juu<=5;juu++){ if(juu==sen||juu==hyaku)continue; for(ichi=0;ichi<=5;ichi++){ if(ichi==sen||ichi==hyaku||ichi==juu) continue; sum+=sen*1000+hyaku*100+juu*10+ichi; } } } } printf("答えは:%d",sum); scanf("%d",&sen);//VisualStudioがコマンドプロンプトを消し去るのをとめる return 0; }
お礼
詳しく解説していただき有り難うございます。