From mik@remus.dti.ne.jp Wed Jun 2 02:00:56 1999 Received: from wise19.mn.waseda.ac.jp (wise19.mn.waseda.ac.jp [133.9.4.137]) by newton.kashi.info.waseda.ac.jp (8.8.8/3.7W) with ESMTP id CAA21971 for ; Wed, 2 Jun 1999 02:00:56 +0900 (JST) Received: from wise20.mn.waseda.ac.jp (wise20.mn.waseda.ac.jp [133.9.4.141]) by wise19.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id BAA06448 for ; Wed, 2 Jun 1999 01:50:03 +0900 (JST) Received: from wise13.mn.waseda.ac.jp (wise13.mn.waseda.ac.jp [133.9.4.145]) by wise20.mn.waseda.ac.jp (8.9.1+3.0W/3.7W-19981111) with ESMTP id BAA25819 for ; Wed, 2 Jun 1999 01:50:03 +0900 (JST) Received: from smtp2.dti.ne.jp (smtp2.dti.ne.jp [210.170.128.122]) by wise13.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id BAA00475 for ; Wed, 2 Jun 1999 01:50:03 +0900 (JST) Received: from xynada.remus.dti.ne.jp (PPP18.kawagoe-ap.dti.ne.jp [210.159.169.18]) by smtp2.dti.ne.jp (8.9.0/3.7W) with SMTP id BAA08652; Wed, 2 Jun 1999 01:50:01 +0900 (JST) Message-Id: <199906011650.AA00072@xynada.remus.dti.ne.jp> From: mik@remus.dti.ne.jp (=?ISO-2022-JP?B?GyRCQVI2NiEhQD8bKEI=?=) Date: Wed, 02 Jun 1999 01:50:00 +0900 To: kashi@mn.waseda.ac.jp Cc: mik@remus.dti.ne.jp Subject: =?ISO-2022-JP?B?W0pTSl0xMTA0MjMbJEJAWklkJE5IVjlmJEcbKEIx?= =?ISO-2022-JP?B?MBskQiRyOm4kayVRJTolaxsoQjI=?= MIME-Version: 1.0 X-Mailer: AL-Mail32 Version 1.01 Content-Type: text/plain; charset=iso-2022-jp Status: OR 「切符の番号で10を作るパズル」のプログラム 倉橋 誠 (G97P038-3) g97p0383@mn.waseda.ac.jp  以前に提出したものに不備があったので、再び提出させていただきます。 #include int maketen(double *num); void strcp(char *s1, char *s2); void strca(char *s1, char *s2); void sounyu(int j, char ire); void zengo(double *num, int i, int j, int e); char rireki[3][16]; void main(void) { int t; double num[]={1,1,5,8}; for(int i=0; i<=3; i++){ scanf("%d",&t); num[i]=t; rireki[i][0]=(int)num[i]+48; rireki[i][1]='Z'; } maketen(num); } void strcp(char *s1, char *s2) { int i=0; while(s2[i]!='Z') { s1[i]=s2[i]; i++; } s1[i]='Z'; return; } void strca(char *s1, char *s2) { int i=0,j=0; while(s1[i]!='Z') i++; while(s2[j]!='Z'){ s1[i]=s2[j]; i++; j++; } s1[i]='Z'; return; } void sounyu(int j,char ire) { int i=0; while(rireki[j][i]!='Z') i++; rireki[j][i]=ire; rireki[j][i+1]='Z'; return; } int maketen(double *num) { int j,k; j=0; for(int i=0; i<=3; i++){ if(num[i]!=-1.0) { j++; k=i; } } if(j==1) { if(num[k]==10.0){ for(int j=0; j<=6; j++) printf("%c", rireki[k][j]); printf(" = %f \n" , num[k]); } return 1; } for(i=0; i<=2; i++) { for(j=i+1; j<=3; j++) { if(num[i]==-1 || num[j]==-1) continue; for(int k=1; k<=6; k++) zengo(num,i,j,k); } } return 1; } void zengo(double *num, int i, int j, int e) { double tai,tai2; char t[16]; tai2=num[i]; strcp(t, rireki[i]); strca(rireki[i], rireki[j]); switch(e){ case 1: num[i]=num[i]+num[j]; sounyu(i,'+');break; case 2: num[i]=num[i]-num[j]; sounyu(i,'-');break; case 3: num[i]=num[j]-num[i]; sounyu(i,'#');break; case 4: num[i]=num[i]*num[j]; sounyu(i,'*');break; case 5: num[i]=num[i]/num[j]; sounyu(i,'/');break; case 6: num[i]=num[j]/num[i]; sounyu(i,'A');break; } tai=num[j]; num[j]=-1; maketen(num); num[i]=tai2; num[j]=tai; strcp(rireki[i], t); } 実行例(1158の場合) この実行結果は、左から読みます。例えば 45+ は 4+5を表します。 45+6-は、(4+5)-6 です。115/-8A は、8/(1-(1/5)) です。 46# は 6-4 を、56A は 6/5 を表します。 1 1 5 8 15/1#8A = 10.000000 115/-8A = 10.000000 以上