アプリ版:「スタンプのみでお礼する」機能のリリースについて

四つの数字を+,-,×,÷とカッコを使って
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は同一とする
ということでお願いします

A 回答 (9件)

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/22 19:12

たびたびすいません。

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
    • good
    • 0
この回答へのお礼

お待ちしておりました。もう一度考えてみるということでしたので、
質問を締め切らずにいたかいがありました。
もし自分ひとりで考えたら絶対思いつけなかったと思います。

皆様のおかげでいろいろ見つかりましたので、
この場をお借りして、答えを整理してみたいと思います。

(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)と同じといえなくもない
のでしょうが、普通思いつかないと思うので、別物としたいです。

プログラムが組めるのっていいですね。
最後になりましたが、今回は本当にありがとうございました。

お礼日時:2008/11/30 21:09

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>
    • good
    • 0

No6です。


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

もう少し考えてみます。
    • good
    • 0

このたぐいの問題の答を効率的に出す方法は未だかつてお目にかかった事がありません。

おそらく存在しないのだと思います。
なので確実に解くとすればコンピュータを使って全数検索するしかないでしょう。
ということでやってみました。一応それらしき答が出たので恐らくあっていると思います。
なお、
・括弧の付け方を変えるのは、数字の並びを入れ替える事と等価なので、括弧の付け方は固定して数字の並びのみ全通り試しています。
・足し算、掛け算の順番を変えたものの同一視、×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>
    • good
    • 0
この回答へのお礼

プログラムまで作ってやっていただいて、ありがとうございました。
私にはプログラムはわかりませんが、おかげでもう一つの答えの、
(3-1)×4+2=10
を知ることができました。
他はすべて、私が考え付いたものと同じとみなせるものでした。

ただ、No1回答者のtechno_303さんに教えていただいた答えの
(3-(1÷2))×4=10 ( オリジナル (-1÷2+3)×4  )
がはいっておりません。
コンピューターも答えのすべてを出せたわけではないようです。

お礼日時:2008/11/24 06:45

(4÷1)+(3×2)


(4×1)+(3×2)
解りやすく( )をつけています。

(2×3+4)÷1
(2×3+4)×1
これは2番目になってしまうのかな?

この回答への補足

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

補足日時:2008/11/24 06:45
    • good
    • 0
この回答へのお礼

先に補足にてお礼をさせていただきましたが、
やはり「回答へのお礼」でお礼をするのが礼儀だと思いましたので、
お礼申し上げます。

この問題を一緒に考えていただいたことに感謝しております。
ありがとうございました。

お礼日時:2008/11/24 14:51

(14/2)+3 かな

この回答への補足

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

補足日時:2008/11/22 19:16
    • good
    • 0
この回答へのお礼

先にて補足にお礼をさせていただきましたが、
やはり「回答へのお礼」でお礼をするのが礼儀だと思いましたので、
お礼申し上げます。

この問題を、一緒に考えていただいたことに感謝しております。
ありがとうございました。

お礼日時:2008/11/24 14:54

>なお、


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

この回答への補足

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

補足日時:2008/11/22 19:06
    • good
    • 0

とりあえず


1×3×4-2=10

この回答への補足

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

つまりは、
owata-さんの回答は私の4番目と同じとさせてください

補足日時:2008/11/22 18:59
    • good
    • 0
この回答へのお礼

先に補足にお礼をさせていただきましたが、
やはり「回答へのお礼」でお礼をするのが礼儀だと思いましたので、
お礼申し上げます。

この問題を一緒に考えていただいたことに感謝しております。
ありがとうございました。

お礼日時:2008/11/24 14:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!