支持相除的时候出现的无理数运算哦~
比如 3 3 7 7 的结果是 (3+3/7)*7 = 24 。解析一下, 之间出现了3/7 于是(3+3/7)*7 = (21+3)/7*7 =24
(我自学的,代码可能有累赘的地方,希望大家多多指教)
执行程序见附件。- typedef struct
- {
- int fa;
- int fb;
- } fraction;
- char axb[3];
- fraction arr[4];
- fraction outvar;
- int whox[3];
- int overa;
- void arrangement(int a[],int n);
- void next(fraction a[],int n);
- void count(fraction a,int x,fraction b,int n);
- main()
- {
- int i,ma[4];
- for (i=0;i<4;i++) arr[i].fb=1;
- while (1)
- {
- printf("Press [Ctrl+C]=Quit \n");
- printf("Input 4 numbers,such as: 3 3 8 8 : ");
- scanf("%d %d %d %d",&ma[0],&ma[1],&ma[2],&ma[3]);
- overa=0;
- arrangement(ma,4);
- if (overa==0) printf("Not result!\n\n");
- }
- getch();
- }
- void arrangement(int a[],int n)
- {
- int temp[4];
- int i,j,k;
- if (n==0)
- {
- next(arr,4);
- return;
- }
- for (i=0;i<n;i++)
- { k=0;
- arr[4-n].fa=a[i];
- for (j=0;j<n;j++) {if (i!=j) temp[k++]=a[j];}
- arrangement(temp,n-1);
- }
- }
- void next(fraction a[],int n)
- {
- int i,j;
- fraction temp[4];
- if ((overa==0)&&(n==1)&&(a[0].fa==24*a[0].fb))
- {printf("\n");
- if (whox[1]==0)
- {
- if (whox[0]==0)
- {printf("[(%d %c %d) %c %d] %c %d",arr[0].fa,axb[0],arr[1].fa,axb[1],arr[2].fa,axb[2],arr[3].fa);}
- else if (whox[0]==1)
- {printf("[%d %c (%d %c %d)] %c %d",arr[0].fa,axb[1],arr[1].fa,axb[0],arr[2].fa,axb[2],arr[3].fa);}
- else if (whox[0]==2)
- {printf("(%d %c %d) %c (%d %c %d)",arr[0].fa,axb[1],arr[1].fa,axb[2],arr[2].fa,axb[0],arr[3].fa);}
- }
- else
- {
- if (whox[0]==0)
- {printf("(%d %c %d) %c (%d %c %d)",arr[0].fa,axb[0],arr[1].fa,axb[2],arr[2].fa,axb[1],arr[3].fa);}
- else if (whox[0]==1)
- {printf("%d %c [(%d %c %d) %c %d]",arr[0].fa,axb[2],arr[1].fa,axb[0],arr[2].fa,axb[1],arr[3].fa);}
- else if (whox[0]==2)
- {printf("%d %c [%d %c (%d %c %d)]",arr[0].fa,axb[2],arr[1].fa,axb[1],arr[2].fa,axb[0],arr[3].fa);}
- }
- printf(" = 24 \n\nPress any key to continue...");
- getch();
- printf("\n\n");
- overa=1;
- return;
- }
- for (i=0;i<n-1;i++)
- {
- whox[4-n]=i;
- for (j=0;j<n;j++){temp[j].fa=a[j].fa;temp[j].fb=a[j].fb;}
- for (j=i+1;j<n-1;j++){temp[j].fa=temp[j+1].fa;temp[j].fb=a[j+1].fb;}
- for (j=0;j<4;j++)
- {
- count(a[i],j,a[i+1],n);
- temp[i].fa=outvar.fa;
- temp[i].fb=outvar.fb;
- if (outvar.fb!=0) next(temp,n-1);
- }
- }
- }
- void count(fraction a,int x,fraction b,int n)
- {
- if (x==0)
- {
- axb[4-n]='+';
- outvar.fa=(a.fa*b.fb)+(b.fa*a.fb);
- outvar.fb=a.fb*b.fb;
- }
- if (x==1)
- {
- axb[4-n]='-';
- outvar.fa=(a.fa*b.fb)-(b.fa*a.fb);
- outvar.fb=a.fb*b.fb;
- }
- if (x==2)
- {
- axb[4-n]='*';
- outvar.fa=a.fa*b.fa;
- outvar.fb=a.fb*b.fb;
- }
- if (x==3)
- {
- axb[4-n]='/';
- outvar.fa=a.fa*b.fb;
- outvar.fb=a.fb*b.fa;
- }
- }
复制代码 |
|