• ベストアンサー

1・2・3・4の四つの数字を四則演算で10にする方法

四つの数字を+,-,×,÷とカッコを使って 10にする、よくある数字遊びです 1、2、3、4の四つを使って10にする方法は幾通りもありますが、 私が考えついたのは 1+2+3+4=10 1×2×3+4=10 4×2+3-1=10 4×3-2×1=10 の四通りだけでした しかし知人によると、もっとたくさんあるということです。 ほかにどんなやりかたがるのでしょうか? なお、 ・足し算、掛け算の順番を変えたものは同一とする ・×1と÷1は同一とする ということでお願いします

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

  • ベストアンサー
回答No.1

(-1÷2+3)×4 なんてのはだめでしょうか。

nisimatuya
質問者

お礼

すごいです!計算途中に整数じゃなくなるパターンがあるとは思いもしませんでした。これを参考にして私ももう一つ思いつきました。 (3÷2+1)×4=10 もありますね ありがとうございます

その他の回答 (8)

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.9

たびたびすいません。No8です。 先ほどのプログラムは1箇所間違いがありました。解答は正しくないです。 誤 /**/ else if(n==2){/**/ //b-a /**/ /**/ temp_[0]=a[0]-b[0];  ←ココ /**/ /**/ temp_[1]="("+b[1]+"-"+a[1]+")"; /**/ } 正 /**/ else if(n==2){/**/ //b-a /**/ /**/ temp_[0]=b[0]-a[0]; /**/ /**/ temp_[1]="("+b[1]+"-"+a[1]+")"; /**/ } というわけでそれを直しました。 今度はきちんと答が10になる事を確認しています。 また、テキストエディタと表計算ソフトを使って重複をいくつか削除しました。 ・「×1」と「÷1」を統一 ・a*bとb*aを統一 ・a*b*cの順番を入れ替えたものを統一 ----- ((3*4)-(1*2))=10 (((2*3)+4)*1)=10 (((2*4)-1)+3)=10 (((2*4)+3)-1)=10 (((3-1)*4)+2)=10 (((3*4)-2)*1)=10 (((3/2)+1)*4)=10 ((1*2*3)+4)=10 ((1*3*4)-2)=10 ((1*4)+(2*3))=10 ((1+(3/2))*4)=10 ((2*3)+(1*4))=10 ((2*4)-(1-3))=10 ((2*4)+(3-1))=10 ((2/(1/3))+4)=10 ((3-(1/2))*4)=10 ((3-1)+(2*4))=10 ((3*4)-(1*2))=10 ((3/(1/2))+4)=10 ((3/(1/4))-2)=10 ((3+(2*4))-1)=10 ((4*(3-1))+2)=10 ((4/(1/3))-2)=10 ((4+(2*3))*1)=10 (1*((2*3)+4))=10 (1*((3*4)-2))=10 (1*(4+(2*3)))=10 (2-((1-3)*4))=10 (2-(4*(1-3)))=10 (2+((3-1)*4))=10 (2+(4*(3-1)))=10 (3-(1-(2*4)))=10 (3+((2*4)-1))=10 (4*((3/2)+1))=10 (4*(1+(3/2)))=10 (4*(3-(1/2)))=10 (4+(1*2*3))=10 (4+(2/(1/3)))=10 (4+(3/(1/2)))=10

nisimatuya
質問者

お礼

お待ちしておりました。もう一度考えてみるということでしたので、 質問を締め切らずにいたかいがありました。 もし自分ひとりで考えたら絶対思いつけなかったと思います。 皆様のおかげでいろいろ見つかりましたので、 この場をお借りして、答えを整理してみたいと思います。 (1)  1+2+3+4 (2)  1×2×3+4 (3)  4×2+3-1 (4)  4×3-2×1 (5)  (3-1)×4+2 (6)  (3-1÷2)×4 (7)  (3÷2+1)×4 (8)  4÷(1÷3)-2 (9)  3÷(1÷4)-2 (10)  2÷(1÷3)+4 (11)  3÷(1÷2)+4 今回の回答で見つかったもの(8)~(11) ただ、よく考えてみれば A×B=A÷(1÷B) なので、 厳密に言えば(8)~(11)は(2),(4)と同じといえなくもない のでしょうが、普通思いつかないと思うので、別物としたいです。 プログラムが組めるのっていいですね。 最後になりましたが、今回は本当にありがとうございました。

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.8

No6,7です。プログラムを書きなおし、計算の順番(=括弧の付け方)を全通り試すようにしました。 また、冒頭にマイナスがついている場合ですが、 例えば (-1÷2+3)×4 は (3-(1÷2))×4 と書き直せますので、別に扱う必要はないと思います。 ただ、前回以上に多数の重複が出てしまっています。 数字の並びを全通り試した上で括弧の付け方をも全通り試しているのが冗長なのだと思いますが、確信がもてなかったので重複させています。 一応、完全に同一の式と、1+2+3+4=10と同一の式は後から省きましたが、他は検出が面倒なのでそのままにしました。 また、 (4+(3*(2/1)))=10 と (4+(3/(1/2)))=10 のように同一かどうかの判定に迷うものもありました。 以下解答。 ----- 1+2+3+4=10 (((1-3)*4)-2)=10 (((1-3)*4)+2)=10 (((1*2)*3)+4)=10 (((1*3)*2)+4)=10 (((1*3)*4)-2)=10 (((1*4)*3)-2)=10 (((1/2)-3)*4)=10 (((2*1)*3)+4)=10 (((2*3)*1)+4)=10 (((2*3)/1)+4)=10 (((2*3)+4)*1)=10 (((2*3)+4)/1)=10 (((2*4)-1)-3)=10 (((2*4)-1)+3)=10 (((2*4)+3)-1)=10 (((2/1)*3)+4)=10 (((3-1)*4)-2)=10 (((3-1)*4)+2)=10 (((3*1)*2)+4)=10 (((3*1)*4)-2)=10 (((3*2)*1)+4)=10 (((3*2)/1)+4)=10 (((3*2)+4)*1)=10 (((3*2)+4)/1)=10 (((3*4)-2)*1)=10 (((3*4)-2)/1)=10 (((3*4)*1)-2)=10 (((3*4)/1)-2)=10 (((3/1)*2)+4)=10 (((3/1)*4)-2)=10 (((3/2)+1)*4)=10 (((4*1)*3)-2)=10 (((4*2)-1)-3)=10 (((4*2)-1)+3)=10 (((4*2)+3)-1)=10 (((4*3)-2)*1)=10 (((4*3)-2)/1)=10 (((4*3)*1)-2)=10 (((4*3)/1)-2)=10 (((4/1)*3)-2)=10 ((1-(2*4))-3)=10 ((1-(2*4))+3)=10 ((1-(4*2))-3)=10 ((1-(4*2))+3)=10 ((1-3)-(2*4))=10 ((1-3)-(4*2))=10 ((1-3)+(2*4))=10 ((1-3)+(4*2))=10 ((1*(2*3))+4)=10 ((1*(3*2))+4)=10 ((1*(3*4))-2)=10 ((1*(4*3))-2)=10 ((1*2)-(3*4))=10 ((1*2)-(4*3))=10 ((1*4)+(2*3))=10 ((1*4)+(3*2))=10 ((1+(3/2))*4)=10 ((2-(3*4))*1)=10 ((2-(3*4))/1)=10 ((2-(4*3))*1)=10 ((2-(4*3))/1)=10 ((2*(1*3))+4)=10 ((2*(3*1))+4)=10 ((2*(3/1))+4)=10 ((2*1)-(3*4))=10 ((2*1)-(4*3))=10 ((2*3)+(1*4))=10 ((2*3)+(4*1))=10 ((2*3)+(4/1))=10 ((2*4)-(1-3))=10 ((2*4)-(3-1))=10 ((2*4)+(1-3))=10 ((2*4)+(3-1))=10 ((2/(1/3))+4)=10 ((2/1)-(3*4))=10 ((2/1)-(4*3))=10 ((3-(1/2))*4)=10 ((3-1)-(2*4))=10 ((3-1)-(4*2))=10 ((3-1)+(2*4))=10 ((3-1)+(4*2))=10 ((3*(1*2))+4)=10 ((3*(1*4))-2)=10 ((3*(2*1))+4)=10 ((3*(2/1))+4)=10 ((3*(4*1))-2)=10 ((3*(4/1))-2)=10 ((3*2)+(1*4))=10 ((3*2)+(4*1))=10 ((3*2)+(4/1))=10 ((3*4)-(1*2))=10 ((3*4)-(2*1))=10 ((3*4)-(2/1))=10 ((3/(1/2))+4)=10 ((3/(1/4))-2)=10 ((3+(2*4))-1)=10 ((3+(4*2))-1)=10 ((4*(1-3))-2)=10 ((4*(1-3))+2)=10 ((4*(1*3))-2)=10 ((4*(3-1))-2)=10 ((4*(3-1))+2)=10 ((4*(3*1))-2)=10 ((4*(3/1))-2)=10 ((4*1)+(2*3))=10 ((4*1)+(3*2))=10 ((4*2)-(1-3))=10 ((4*2)-(3-1))=10 ((4*2)+(1-3))=10 ((4*2)+(3-1))=10 ((4*3)-(1*2))=10 ((4*3)-(2*1))=10 ((4*3)-(2/1))=10 ((4/(1/3))-2)=10 ((4/1)+(2*3))=10 ((4/1)+(3*2))=10 ((4+(2*3))*1)=10 ((4+(2*3))/1)=10 ((4+(3*2))*1)=10 ((4+(3*2))/1)=10 (1-((2*4)+3))=10 (1-((4*2)+3))=10 (1-(3+(2*4)))=10 (1-(3+(4*2)))=10 (1*((2*3)+4))=10 (1*((3*2)+4))=10 (1*((3*4)-2))=10 (1*((4*3)-2))=10 (1*(2-(3*4)))=10 (1*(2-(4*3)))=10 (1*(4+(2*3)))=10 (1*(4+(3*2)))=10 (2-((1-3)*4))=10 (2-((1*3)*4))=10 (2-((1*4)*3))=10 (2-((3-1)*4))=10 (2-((3*1)*4))=10 (2-((3*4)*1))=10 (2-((3*4)/1))=10 (2-((3/1)*4))=10 (2-((4*1)*3))=10 (2-((4*3)*1))=10 (2-((4*3)/1))=10 (2-((4/1)*3))=10 (2-(1*(3*4)))=10 (2-(1*(4*3)))=10 (2-(3*(1*4)))=10 (2-(3*(4*1)))=10 (2-(3*(4/1)))=10 (2-(3/(1/4)))=10 (2-(4*(1-3)))=10 (2-(4*(1*3)))=10 (2-(4*(3-1)))=10 (2-(4*(3*1)))=10 (2-(4*(3/1)))=10 (2-(4/(1/3)))=10 (2+((1-3)*4))=10 (2+((3-1)*4))=10 (2+(4*(1-3)))=10 (2+(4*(3-1)))=10 (3-((2*4)-1))=10 (3-((4*2)-1))=10 (3-(1-(2*4)))=10 (3-(1-(4*2)))=10 (3+((2*4)-1))=10 (3+((4*2)-1))=10 (3+(1-(2*4)))=10 (3+(1-(4*2)))=10 (4*((1/2)-3))=10 (4*((3/2)+1))=10 (4*(1+(3/2)))=10 (4*(3-(1/2)))=10 (4+((1*2)*3))=10 (4+((1*3)*2))=10 (4+((2*1)*3))=10 (4+((2*3)*1))=10 (4+((2*3)/1))=10 (4+((2/1)*3))=10 (4+((3*1)*2))=10 (4+((3*2)*1))=10 (4+((3*2)/1))=10 (4+((3/1)*2))=10 (4+(1*(2*3)))=10 (4+(1*(3*2)))=10 (4+(2*(1*3)))=10 (4+(2*(3*1)))=10 (4+(2*(3/1)))=10 (4+(2/(1/3)))=10 (4+(3*(1*2)))=10 (4+(3*(2*1)))=10 (4+(3*(2/1)))=10 (4+(3/(1/2)))=10 以下ソース。 ----- <html> <body> <script language="JavaScript"> temp=""; MAX=4; MAXOP=6; a=[]; a[0]=new Array(1,"1"); a[1]=new Array(2,"2"); a[2]=new Array(3,"3"); a[3]=new Array(4,"4"); chkten(a); document.write(temp); function chkten(nums){ /**/ var i,j,k,l,m,newnums; /**/ if(nums.length==1){ /**/ /**/ if(nums[0][0]==10){ /**/ /**/ /**/ temp+=nums[0][1]+"=10<br>"; /**/ /**/ } /**/ /**/ return; /**/ } /**/ else{ /**/ /**/ for(i=0;i<nums.length;i++){ /**/ /**/ /**/ for(j=0;j<nums.length;j++){ /**/ /**/ /**/ /**/ if(i==j){ /**/ /**/ /**/ /**/ /**/ continue; /**/ /**/ /**/ /**/ /**/ } /**/ /**/ /**/ /**/ l=0; /**/ /**/ /**/ /**/ m=0; /**/ /**/ /**/ /**/ newnums=[]; /**/ /**/ /**/ /**/ while(1){ /**/ /**/ /**/ /**/ /**/ if(l==i)l++; /**/ /**/ /**/ /**/ /**/ if(l==j)l++; /**/ /**/ /**/ /**/ /**/ if(l==i)l++; /**/ /**/ /**/ /**/ /**/ if(l>=nums.length) break; /**/ /**/ /**/ /**/ /**/ newnums[m]=nums[l] /**/ /**/ /**/ /**/ /**/ l++; /**/ /**/ /**/ /**/ /**/ m++; /**/ /**/ /**/ /**/ } /**/ /**/ /**/ /**/ for(k=0;k<MAXOP;k++){ /**/ /**/ /**/ /**/ /**/ arr=[]; /**/ /**/ /**/ /**/ /**/ arr[0]=operate(nums[i],nums[j],k); /**/ /**/ /**/ /**/ /**/ chkten(newnums.concat(arr)); /**/ /**/ /**/ /**/ } /**/ /**/ /**/ } /**/ /**/ } /**/ } } function operate(a,b,n){ /**/ temp_=[]; /**/ if(n==0){/**/ //a+b /**/ /**/ temp_[0]=a[0]+b[0]; /**/ /**/ temp_[1]="("+a[1]+"+"+b[1]+")"; /**/ } /**/ else if(n==1){/**/ //a-b /**/ /**/ temp_[0]=a[0]-b[0]; /**/ /**/ temp_[1]="("+a[1]+"-"+b[1]+")"; /**/ } /**/ else if(n==2){/**/ //b-a /**/ /**/ temp_[0]=a[0]-b[0]; /**/ /**/ temp_[1]="("+b[1]+"-"+a[1]+")"; /**/ } /**/ else if(n==3){/**/ //a*b /**/ /**/ temp_[0]=a[0]*b[0]; /**/ /**/ temp_[1]="("+a[1]+"*"+b[1]+")"; /**/ } /**/ else if(n==4){/**/ //a/b /**/ /**/ temp_[0]=a[0]/b[0]; /**/ /**/ temp_[1]="("+a[1]+"/"+b[1]+")"; /**/ } /**/ else if(n==5){/**/ //b/a /**/ /**/ temp_[0]=b[0]/a[0]; /**/ /**/ temp_[1]="("+b[1]+"/"+a[1]+")"; /**/ } /**/ return temp_; } </script> </body> </html>

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.7

No6です。 すいません、どうやら思い違いをしていたようです。 条件に書いた、 >括弧の付け方を変えるのは、数字の並びを入れ替える事と等価 というのは間違いでした。 割り算や引き算の時に、後ろを先に計算していた場合が表せません。 例えばA/(B+C)やA-(B*C)など。 また先頭にマイナスを付けるのも考えていませんでした。 もう少し考えてみます。

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.6

このたぐいの問題の答を効率的に出す方法は未だかつてお目にかかった事がありません。おそらく存在しないのだと思います。 なので確実に解くとすればコンピュータを使って全数検索するしかないでしょう。 ということでやってみました。一応それらしき答が出たので恐らくあっていると思います。 なお、 ・括弧の付け方を変えるのは、数字の並びを入れ替える事と等価なので、括弧の付け方は固定して数字の並びのみ全通り試しています。 ・足し算、掛け算の順番を変えたものの同一視、×1と÷1の同一視は面倒なので考えていません。 (((1+2)+3)+4=10 (((1*2)*3)+4=10 (((1+2)+4)+3=10 (((1+3)+2)+4=10 (((1*3)*2)+4=10 (((1+3)+4)+2=10 (((1*3)*4)-2=10 (((1+4)+2)+3=10 (((1+4)+3)+2=10 (((1*4)*3)-2=10 (((2+1)+3)+4=10 (((2*1)*3)+4=10 (((2/1)*3)+4=10 (((2+1)+4)+3=10 (((2+3)+1)+4=10 (((2*3)*1)+4=10 (((2*3)/1)+4=10 (((2+3)+4)+1=10 (((2*3)+4)*1=10 (((2*3)+4)/1=10 (((2+4)+1)+3=10 (((2*4)-1)+3=10 (((2+4)+3)+1=10 (((2*4)+3)-1=10 (((3+1)+2)+4=10 (((3*1)*2)+4=10 (((3/1)*2)+4=10 (((3+1)+4)+2=10 (((3-1)*4)+2=10 (((3*1)*4)-2=10 (((3/1)*4)-2=10 (((3+2)+1)+4=10 (((3*2)*1)+4=10 (((3*2)/1)+4=10 (((3/2)+1)*4=10 (((3+2)+4)+1=10 (((3*2)+4)*1=10 (((3*2)+4)/1=10 (((3+4)+1)+2=10 (((3*4)*1)-2=10 (((3*4)/1)-2=10 (((3+4)+2)+1=10 (((3*4)-2)*1=10 (((3*4)-2)/1=10 (((4+1)+2)+3=10 (((4+1)+3)+2=10 (((4*1)*3)-2=10 (((4/1)*3)-2=10 (((4+2)+1)+3=10 (((4*2)-1)+3=10 (((4+2)+3)+1=10 (((4*2)+3)-1=10 (((4+3)+1)+2=10 (((4*3)*1)-2=10 (((4*3)/1)-2=10 以下ソース。JavaScriptです。 ※「/* */」はインデントがわり ----- <html> <body> <script language="JavaScript"> a=[]; i=-1; i++;a[i]=new Array(1,2,3,4); i++;a[i]=new Array(1,2,4,3); i++;a[i]=new Array(1,3,2,4); i++;a[i]=new Array(1,3,4,2); i++;a[i]=new Array(1,4,2,3); i++;a[i]=new Array(1,4,3,2); i++;a[i]=new Array(2,1,3,4); i++;a[i]=new Array(2,1,4,3); i++;a[i]=new Array(2,3,1,4); i++;a[i]=new Array(2,3,4,1); i++;a[i]=new Array(2,4,1,3); i++;a[i]=new Array(2,4,3,1); i++;a[i]=new Array(3,1,2,4); i++;a[i]=new Array(3,1,4,2); i++;a[i]=new Array(3,2,1,4); i++;a[i]=new Array(3,2,4,1); i++;a[i]=new Array(3,4,1,2); i++;a[i]=new Array(3,4,2,1); i++;a[i]=new Array(4,1,2,3); i++;a[i]=new Array(4,1,3,2); i++;a[i]=new Array(4,2,1,3); i++;a[i]=new Array(4,2,3,1); i++;a[i]=new Array(4,3,1,2); i++;a[i]=new Array(4,3,2,1); op=[]; opchar="+-*/"; temp=0; for(j=0;j<i;j++){ /* */for(op[0]=0;op[0]<4;op[0]++){ /* *//* */for(op[1]=0;op[1]<4;op[1]++){ /* *//* *//* */for(op[2]=0;op[2]<4;op[2]++){ /* *//* *//* *//* */temp=a[j][0]; /* *//* *//* *//* */for(k=1;k<4;k++){ /* *//* *//* *//* *//* */temp=operate(temp,a[j][k],op[k-1]); /* *//* *//* *//* */} /* *//* *//* *//* */if(temp==10){ /* *//* *//* *//* *//* */document.write("((("+a[j][0]+opchar.charAt(op[0])+a[j][1]+")" /* *//* *//* *//* *//* */+opchar.charAt(op[1])+a[j][2]+")" /* *//* *//* *//* *//* */+opchar.charAt(op[2])+a[j][3]+"=10<br>"); /* *//* *//* *//* */} /* *//* *//* */} /* *//* */} /* */} } function operate(a,b,n){ /* */if(n==0) /* *//* */return a+b; /* */else if(n==1) /* *//* */return a-b; /* */else if(n==2) /* *//* */return a*b; /* */else if(n==3) /* *//* */return a/b; } </script> </body> </html>

nisimatuya
質問者

お礼

プログラムまで作ってやっていただいて、ありがとうございました。 私にはプログラムはわかりませんが、おかげでもう一つの答えの、 (3-1)×4+2=10 を知ることができました。 他はすべて、私が考え付いたものと同じとみなせるものでした。 ただ、No1回答者のtechno_303さんに教えていただいた答えの (3-(1÷2))×4=10 ( オリジナル (-1÷2+3)×4  ) がはいっておりません。 コンピューターも答えのすべてを出せたわけではないようです。

noname#103206
noname#103206
回答No.5

(4÷1)+(3×2) (4×1)+(3×2) 解りやすく( )をつけています。 (2×3+4)÷1 (2×3+4)×1 これは2番目になってしまうのかな?

nisimatuya
質問者

お礼

先に補足にてお礼をさせていただきましたが、 やはり「回答へのお礼」でお礼をするのが礼儀だと思いましたので、 お礼申し上げます。 この問題を一緒に考えていただいたことに感謝しております。 ありがとうございました。

nisimatuya
質問者

補足

ご回答いただき、ありがとうございました。 いろいろ考えていただいて感謝しています。 そうですね。考えていただいたのは、式の骨格が 2×3+4 で、それに×1、÷1をどこかに付けるというパターンですので、 私の2番目と同じとさせていただきます。

回答No.4

(14/2)+3 かな

nisimatuya
質問者

お礼

先にて補足にお礼をさせていただきましたが、 やはり「回答へのお礼」でお礼をするのが礼儀だと思いましたので、 お礼申し上げます。 この問題を、一緒に考えていただいたことに感謝しております。 ありがとうございました。

nisimatuya
質問者

補足

ご回答いただき、ありがとうございます。 そしてごめんなさい。 つくづく、自分の文章の至らなさを痛感しております 「四つの数字を使って」ではなく「四つの数を使って」 でした。1と4をくっつけて14にするというのはなしでお願いします。

  • equinox2
  • ベストアンサー率48% (321/660)
回答No.3

>なお、 >・足し算、掛け算の順番を変えたものは同一とする >・×1と÷1は同一とする このルールだと、順番が同じでもカッコの有無とカッコの位置が 違うのは、同一の式にはならないのでは・・

nisimatuya
質問者

補足

ご迷惑をおかけいたしました 詳しくはNo2の回答者さまへの捕捉に書きましたが、 純粋に数字のパズルとして見ていただきたかったということです。

  • owata-www
  • ベストアンサー率33% (645/1954)
回答No.2

とりあえず 1×3×4-2=10

nisimatuya
質問者

お礼

先に補足にお礼をさせていただきましたが、 やはり「回答へのお礼」でお礼をするのが礼儀だと思いましたので、 お礼申し上げます。 この問題を一緒に考えていただいたことに感謝しております。 ありがとうございました。

nisimatuya
質問者

補足

ご回答いただきありがとうございました。 申し訳ありません。「なお」以下のルールについての文章が不完全なため、ご迷惑をおかけしました。 かなり漠然とした言い方ですが、 「中学校レベルの数学をマスターした人にとって、同一とみなせる式は同一として考えてください」 ということを言いたかったのです。 つまりは、 owata-さんの回答は私の4番目と同じとさせてください