4つの自然数を使って10を作る

このエントリーをはてなブックマークに追加
1132人目の素数さん
4つの自然数を使って10を作る
という問題を、小学生などが車のナンバープレートなどで
計算力の向上のために解いているという話を聞いたことがあります。
4つの自然数を使って10を作るというのは
4つの自然数を+ ÷ * -どれかを使って作るということです。
例えば[8,5,4,3]だったら

8/4+3+5=10
と成ります。
4つの全ての自然数を使わなければいけません。
+-÷*は全てを使う必要はありません。
このルールで
[1,1,1,1]
などを除けばすべて10を作れるのでしょうか?
それともできないのでしょうか。
作れるならば証明できるのでしょうか?
2132人目の素数さん:2005/12/11(日) 15:17:00
>>1 king 氏ね。
3132人目の素数さん:2005/12/11(日) 16:03:56
その程度なら計算機による総当りでFA
4132人目の素数さん:2005/12/11(日) 17:06:27
眠れない夜の暇つぶしにおすすめ。
ちなみに四つの数字が異なれば大丈夫、なはず。
割り算を分数だと思うか、余り付き割り算だと思うかで
変わってくるような気がするけど。
5132人目の素数さん:2005/12/11(日) 23:41:59
11-1*1=10

なわけだが・・・
6132人目の素数さん:2005/12/11(日) 23:59:20
プログラム書いてみた。
四則演算のみ、括弧無し、数字の連結ありで、10が出来ないのは以下の場合

1 1 1 3
1 1 1 4
1 1 1 5
1 1 1 6
1 1 4 9
1 1 5 8
1 1 5 9
1 1 6 8
1 1 6 9
1 1 7 9
1 2 2 3
1 2 5 9
1 2 6 9
1 3 7 8
1 3 8 8
1 3 9 9
1 4 7 9
1 4 9 9
1 5 5 6
1 5 6 6
1 5 6 7
1 5 9 9
1 6 6 7
1 6 7 7
1 6 9 9
2 2 3 5
2 2 9 9
2 3 3 4
7132人目の素数さん:2005/12/11(日) 23:59:52
2 4 5 6
3 3 3 5
3 3 5 7
3 3 6 8
3 5 7 7
3 5 7 8
3 5 8 8
3 7 8 9
3 9 9 9
4 4 4 4
4 4 4 9
4 4 7 7
4 5 5 8
4 5 6 8
4 5 7 9
4 6 8 9
4 7 7 9
4 8 8 8
4 8 9 9
4 9 9 9
5 5 5 8
5 6 6 8
5 6 6 9
5 6 7 9
5 7 7 7
5 7 7 8
8132人目の素数さん:2005/12/12(月) 00:00:12
5 7 8 8
5 7 8 9
5 7 9 9
5 8 8 8
5 8 8 9
5 8 9 9
5 9 9 9
6 6 6 6
6 6 7 7
6 6 8 8
6 6 9 9
6 7 7 8
6 7 7 9
6 7 8 9
6 8 8 8
6 8 9 9
6 9 9 9
7 7 7 7
7 7 7 9
7 7 8 8
7 7 9 9
7 8 8 9
7 9 9 9
8 8 8 8
8 8 9 9
9 9 9 9
9132人目の素数さん:2005/12/12(月) 13:33:36
最近は小町算という言葉を知らない人が多いらしい。
10GiantLeaves ◆6fN.Sojv5w :2005/12/12(月) 19:05:34
talk:>>2 お前に何が分かるというのか?
11小牧愛佳 ◆u/3FmANAKA :2005/12/24(土) 11:17:43
#include <iostream.h>//解のない組み合わせはDOS窓に書き出し
#include <fstream.h>//解があるものはlog.txtファイルに書き出し
ofstream rfile("log.txt");double p(double a,double b,int k){if(0 == k)
{return a*b;}if(1 == k && (b>1.E-6 || b<-1.E-6) ){return a/b;}
if(2 == k){return a+b;}if(3 == k){return a-b;}return 1000.;}
int cal(int e[][24],int* m){int i,j,k,n;double d,r,s,t,u;static char c[4]=
{'*','/','+','-'};for(n=0;n<24;n++){for(i=0;i<4;i++){for(j=0;j<4;j++){
for(k=0;k<4;k++){r=m[e[0][n]];s=m[e[1][n]];t=m[e[2][n]];u=m[e[3][n]];
d=p(p(r,s,i),p(t,u,k),j);if(10.-d <1.E-6 && 10.-d >-1.E-6) {//パターン1
rfile <<"("<<r<<c[i]<<s<<")"<<c[j]<<"("<<t<<c[k]<<u<<")= 10"<<endl ;return 1;}
d=p(p(p(r,s,i),t,j),u,k);if(10.-d <1.E-6 && 10.-d >-1.E-6){//パターン2
rfile <<"(("<<r<<c[i]<<s<<")"<<c[j]<<t<<")"<<c[k]<<u<<"= 10"<<endl;return 1;
}}}}}rfile <<"("<<m[0]<<m[1]<<m[2]<<m[3]<<") not found"<<endl ;return 0;}
void main(void){int f=0,i,n=0;int m[4];static int e[4][24];
for(m[0]=0;m[0]<4;m[0]++){for(m[1]=0;m[1]<4;m[1]++){if(m[0]==m[1])continue;
for(m[2]=0;m[2]<4;m[2]++){if(m[2]==m[0]||m[2]==m[1])continue;m[3]=
6-m[0]-m[1]-m[2];for(i=0;i<4;i++)e[i][n]=m[i];n++;}}}for(m[0]=1;m[0]<10;m[0]++)
{for(m[1]=m[0];m[1]<10;m[1]++){for(m[2]=m[1];m[2]<10;m[2]++){
for(m[3]=m[2];m[3]<10;m[3]++) {f=cal(e,m);if(0==f){for(i=0;i<4;i++)
cout<<m[i];cout<<endl;}}}}}}
12小牧愛佳 ◆u/3FmANAKA :2005/12/30(金) 17:14:14
#include <iostream.h>//解のない組み合わせはDOS窓に書き出し
#include <fstream.h>//解があるものはlog.txtファイルに書き出し
#define N 10.//24になる場合は24.とします(念のため.は付けて置いてね)
ofstream rfile("log.txt");double p(double a,double b,int k){if(0 == k)
{return a*b;}if(1 == k && (b>1.E-6 || b<-1.E-6) ){return a/b;}
if(2 == k){return a+b;}if(3 == k){return a-b;}return N+999.;}
int cal(int e[][24],int* m){int i,j,k,n;double d,r,s,t,u;static char c[4]=
{'*','/','+','-'};for(n=0;n<24;n++){for(i=0;i<4;i++){for(j=0;j<4;j++){
for(k=0;k<4;k++){r=m[e[0][n]];s=m[e[1][n]];t=m[e[2][n]];u=m[e[3][n]];
d=p(p(r,s,i),p(t,u,k),j);if(N-d <1.E-6 && N-d >-1.E-6) {//パターン1
rfile <<"("<<r<<c[i]<<s<<")"<<c[j]<<"("<<t<<c[k]<<u<<") ="<<N<<endl ;return 1;}
d=p(p(p(r,s,i),t,j),u,k);if(N-d <1.E-6 && N-d >-1.E-6){//パターン2
rfile <<"( ("<<r<<c[i]<<s<<")"<<c[j]<<t<<")"<<c[k]<<u<<"="<<N<<endl;return 1;}
d=p(p(-p(r,s,i),t,j),u,k);if(N-d <1.E-6 && N-d >-1.E-6){//パターン3
rfile <<"(-("<<r<<c[i]<<s<<")"<<c[j]<<t<<")"<<c[k]<<u<<"="<<N<<endl;return 1;
}}}}}rfile <<"("<<m[0]<<m[1]<<m[2]<<m[3]<<") not found"<<endl ;return 0;}
void main(void){int f=0,i,n=0;int m[4];static int e[4][24];
for(m[0]=0;m[0]<4;m[0]++){for(m[1]=0;m[1]<4;m[1]++){if(m[0]==m[1])continue;
for(m[2]=0;m[2]<4;m[2]++){if(m[2]==m[0]||m[2]==m[1])continue;m[3]=
6-m[0]-m[1]-m[2];for(i=0;i<4;i++)e[i][n]=m[i];n++;}}}for(m[0]=1;m[0]<10;m[0]++)
{for(m[1]=m[0];m[1]<10;m[1]++){for(m[2]=m[1];m[2]<10;m[2]++){
for(m[3]=m[2];m[3]<10;m[3]++) {f=cal(e,m);if(0==f){for(i=0;i<4;i++)
cout<<m[i];cout<<endl;}}}}}}
13小牧愛佳 ◆u/3FmANAKA :2005/12/30(金) 17:14:44
修正と改良でした・・・
14speedking ◆chWMuw.JpE :2005/12/31(土) 14:50:17
>>1 んー。難問ですな。
解決したら教えて下さい。
15GiantLeaves ◆6fN.Sojv5w :2005/12/31(土) 19:58:16
talk:>>14 プログラムでも作るか?
16132人目の素数さん:2005/12/31(土) 20:14:15
削除よろ
17132人目の素数さん
小学生のウンチ脳ミソに対する問題だな