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

このエントリーをはてなブックマークに追加
11小牧愛佳 ◆u/3FmANAKA
#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;}}}}}}