From kagotani@ma.sa.to Thu May 20 02:07:13 1999 Received: from wise13.mn.waseda.ac.jp (wise13.mn.waseda.ac.jp [133.9.4.145]) by newton.kashi.info.waseda.ac.jp (8.8.8/3.7W) with ESMTP id CAA24186 for ; Thu, 20 May 1999 02:07:13 +0900 (JST) Received: from wise20.mn.waseda.ac.jp (wise20.mn.waseda.ac.jp [133.9.4.141]) by wise13.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id BAA23903 for ; Thu, 20 May 1999 01:56:18 +0900 (JST) Received: from wise19.mn.waseda.ac.jp (wise19.mn.waseda.ac.jp [133.9.4.137]) by wise20.mn.waseda.ac.jp (8.9.1+3.0W/3.7W-19981111) with ESMTP id BAA27233 for ; Thu, 20 May 1999 01:56:18 +0900 (JST) Received: from kago512 (pc045015.tokyo.ppp.waseda.ac.jp [133.9.45.15]) by wise19.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id BAA28753 for ; Thu, 20 May 1999 01:55:49 +0900 (JST) Message-ID: <000101bea218$2553b430$0201a8c0@kago512.kago.domain> Reply-To: "Masato Kagotani" From: "Masato Kagotani" To: Subject: =?iso-2022-jp?B?Zzk3cDAyNTggGyRCZEZDKz8/P00bKEIgGyRCJTclOSVGJWA8QhsoQg==?= =?iso-2022-jp?B?GyRCODMbKEJBGyRCJWwlXSE8JUgbKEIgGyRCIzQ3biMzIzJGfEosGyhC?= Date: Thu, 20 May 1999 01:53:38 +0900 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 4.72.3110.5 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 Status: OR とりあえず数式を総当たりで作って それをそのまま計算するプログラムです したがって同じ順番が入れ替わっただけの同じ数式も 別の物として出力されます #include #include #include #include #define X 10 #define N 4 double expression(void); char exp[256]; int exp_c=0; int Q; int error; void fwd(void) { if((Q=exp[exp_c++])==NULL)return; } double number(void) { double x; int sign='+'; if(Q=='+' && Q=='-') { sign=Q; fwd(); } x=Q-'0'; while(fwd(),isdigit(Q))x=10*x+Q-'0'; if(sign=='-')return -x;else return x; } double factor(void) { return number(); } double term(void) { double x,y; x=factor(); for(;;) { switch(Q) { case '*':fwd();x*=factor();break; case '/':fwd();y=factor();if(y!=0){x/=y;}else{error=1;}break; default:return x; } } } double expression(void) { double x; x=term(); for(;;) { switch(Q) { case '-':fwd();x-=term();break; case '+':fwd();x+=term();break; default:return x; } } } double excute(char *s) { int x; exp_c=0; strcpy(exp,s); error=0; fwd(); x=(int)expression(); if(x==X && error==0)printf("%s=%d\n",exp,x); return 0; } char chr[11]="0123456789"; char cal[5]="+-*/"; void generate(char *t,int depth) { int c; if(depth==(N*2-1)) { t[depth]=0; excute(t); return; } if((depth%2)==0) { for(c=0;c<10;c++) { t[depth]=chr[c]; generate(t,++depth); depth--; } }else{ for(c=0;c<4;c++) { t[depth]=cal[c]; generate(t,++depth); depth--; } } } void main(void) { char text[N*3]; generate(text,0); }