• ベストアンサー

場合の数について

「0 1 2 3 4 5 の6個の数字を用いて4桁の自然数を作るとき、得られる自然数の総和を求めなさい。」 について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • WaterRyo
  • ベストアンサー率100% (1/1)
回答No.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; }

MIBya
質問者

お礼

詳しく解説していただき有り難うございます。

関連するQ&A

専門家に質問してみよう