From g97p0304@mn.waseda.ac.jp Thu May 13 10:54:06 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 KAA01498 for ; Thu, 13 May 1999 10:54:04 +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 KAA27422 for ; Thu, 13 May 1999 10:43:09 +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 KAA15163; Thu, 13 May 1999 10:43:09 +0900 (JST) Received: from wise25.mn.waseda.ac.jp (g97p0304@wise25.mn.waseda.ac.jp [133.9.4.155]) by wise19.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id KAA18623; Thu, 13 May 1999 10:43:08 +0900 (JST) Received: from w59d227.mn.waseda.ac.jp (w59d227.mse.waseda.ac.jp [133.9.7.211]) by wise25.mn.waseda.ac.jp (8.8.5+2.7Wbeta5/3.6Wbeta5) with SMTP id KAA12859; Thu, 13 May 1999 10:43:06 +0900 (JST) Date: Thu, 13 May 1999 10:43:06 +0900 (JST) Message-Id: <199905130143.KAA12859@wise25.mn.waseda.ac.jp> X-Authentication-Warning: wise25.mn.waseda.ac.jp: g97p0304 owned process doing -bs Subject: [JSJ]4/23 MIME-Version: 1.0 Content-Type: Text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit From: KIKUCHI Tomoyuki X-Mailer: JEPRO WinYAT32 Ver.4.0 R9(0) ; #waseda.ac.jp To: kashi@mn.waseda.ac.jp Cc: g97p0304@mn.waseda.ac.jp Status: OR G97P030-4 菊池 智行 E-mail:g97p0304@mn.waseda.ac.jp すいませんが、 文字列の格納の算法がまずく、プログラムとしては未完成です。 ちなみに、 3478-> (3-7/4)*8 =10 1158-> 8/(1-1/5) =10 です。 ----- ここから ----- /*N個の1桁整数で10を作る*/ #include #include #define N 4 #define CODE 48 #define WRT 1 #define DEL -1 #define STOP 'a' #define EPS 0.01 int main(void); void make10(char *a, float *b, int n, char *str); void sub1(char *a, float *b, int n, char *str, int i, int j); void sub2(char *a, float *b, int n, char *str, int i, int j); void rec(char ch, char *str, int sw); void printst(char *str); int main(void){ char a[N]; float b[N]; char str[2*N]; int i=0; /*入力された数を配列aに文字として、 配列bに浮動小数点数として格納*/ for(i=0; i=10-EPS && b[0]<=10+EPS){/*小数の誤差を考慮*/ rec('¥0', str, WRT); printst(str); rec('¥0', str, DEL); } }else{ /*配列から2つの要素を選ぶ*/ for(i=0; i=0; i=i-1){ rec(a[i], str, WRT); for(j=i-1; j>=0; j=j-1){ rec(a[j], str, WRT); sub2(a, b, n, str, i, j); rec(a[j], str, DEL); } rec(a[i], str, DEL); } } } /*---sub1とsub2について--- 足し算と掛け算は可換であるから、make10においてa[i]とa[j]を選ぶ こととa[j]とa[i]を選ぶことは同じである。よって、ijの条件のもとで演算を行う必要がある。 sub1は前者の場合 sub2は後者の場合を満たすための関数である。 ------*/ /*選ばれた2つの要素に演算をする*/ void sub1(char *a, float *b, int n, char *str, int i, int j){ int k=0, l=1; char *c; float *d; /*新たに文字配列と小数配列を確保*/ if((c = (char *)malloc(sizeof(char)*(n-1)))==NULL){ printf("ERROR¥n"); exit(1); } if((d = (float *)malloc(sizeof(float)*(n-1)))==NULL){ printf("ERROR¥n"); exit(1); } c[0] = STOP; /*c[1],d[1]以降には、aとbの添え字がiでもjでもない要素を写す*/ for(k=0; k