讨论 / 为什么只有70分
阿猫喵喵 2010-04-22 03:43:00
点我顶贴 收藏 删除
我的为什么只有70分?

#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()

{

char aa,bb,cc,dd;

scanf("%c %c %c %c", &aa, &bb, &cc, &dd);

if(aa=='A')aa-=64;

else

if(aa>='J')aa-=63;

else aa-='0';

if(bb=='A')bb-=64;

else

if(bb>='J')bb-=63;

else bb-='0';

if(cc=='A')cc-=64;

else

if(cc>='J')cc-=63;

else cc-='0';

if(dd=='A')dd-=64;

else

if(dd>='J')dd-=63;

else dd-='0';

n[0]=aa;

n[1]=bb;

n[2]=cc;

n[3]=dd;

search24(0);

printf("no\n");

while(1);

return 0;

}

void chk(float k)

{

if( (tp != 3) || ( fabs(k-24.0) > 0.001 )) return;

printf("yes\n");while(1); 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;

}

}

查看更多回复
提交回复