天津科技大学,是名校吗:解释这个24点程序算法!急!

来源:百度文库 编辑:神马品牌网 时间:2024/04/27 21:00:56
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>

char op[3], o[5]="+-*/";
float n[4], on[10];
int used[4] = {0}, top=0, tp=0, x;

void chk(float k);
void search24(int d);
float calc(float n1, float n2, char o);
void make(int i, float p, float q, char o, int d);

int main( void )
{
scanf("%f%f%f%f", &n[0], &n[1], &n[2], &n[3]);
search24(0);
printf("No answer.\n");
getch( );
return 0;
}

void chk(float k)
{
if( (tp != 3) || ( fabs(k-24.0) > 0.001 )) return;
for(x=0; x<5; x+=2)
printf("%g %c %g = %g\n", on[x], op[x/2], on[x+1],
calc(on[x], on[x+1], op[x/2]));
getch(); exit(0);
}
float calc(float n1, float n2, char o)
{
switch(o)
{
case '+': return (n1+n2);
case '-': return (n1-n2);
case '*': return (n1*n2);
case '/': return (n1/n2);
}
}
void make(int i, float p, float q, char o, int d)
{
if(fabs(q)>0.001 || o!='/')
n[i] = calc(p, q, o);
op[tp++] = o; chk(n[i]);
search24(d+1); tp--;
}

void search24(int d)
{
int i, j, k;
float p, q;
if(d>=3) return;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
if( (i!=j)&& (used[i]+used[j] == 0) )
{
used[j] = 1; p=n[i]; q=n[j];
on[top++] = p; on[top++] = q;
for(k=0; k<4; k++)
make(i, p, q, o[k], d);
n[i] = p; used[j] = 0;
top -= 2;
}
}

加我qq吧451586

当练习自己看吧,别人很难说清楚的。