📄 8-2-8.c
字号:
/*中国系统分析员顾问团,http://www.csai.cn*/
/*程序员下午考试指南书籍源码*/
#include < stdio.h>
int op[] = { '+','-','*','/'};
char *sample[] = {"ABCDxyz", "ABCxDyz", "ABCxyDz", "ABxCyDz", "ABxCDyz"};
char *format[] = {"%d%c(%d%c(%d%c%d))\n", "%d%c((%d%c%d)%c%d)\n", "(%d%c(%d%c%d))%c%d\n" ,
"((%d%c%d)%c%d)%c%d\n", "(%d%c%d)%c(%d%c%d)\n" };
int calculate( int **ipt[],char *s) {
int st[4],i,j,r1,r2;
for(j=i=0;i<7;i++) {
if (s[i]>='A' && s[i]<='D') st[j++] = **ipt[s[i]-'A'];
else {
r1 = st[j-2]; r2 = st[j-1];
switch (**ipt[s[i]-'x'+4]) {
case '+' :
st[j-2] = r1+r2;
j--;
break;
case '-' :
if(r1<r2) return -1;
st[j-2] = r1-r2;
j--;
break;
case '*' :
st[j-2] = r1*r2;
j--;
break;
case '/' :
if ( r2 == 0 || r1%r2 != 0) return - 1;
st[j-2] = r1/r2;
j--;
break;
}
}
}
return st[0] ;
}
int search( int a[],int k ) {
int m;
static int *i1, *i2, *i3, *i4, *s1, *s2, *s3;
int* * intpt[7] = { &i1,&i2,&i3,&i4,&s1,&s2,&s3 };
int* *rule[][7] = {{ &i1,&s3,&i2,&s2,&i3,&s1,&i4 }, { &i1,&s3,&i2,&s1,&i3,&s2,&i4 },
{ &i1,&s2,&i2,&s1,&i3,&s3,&i4 }, {&i1,&s1,&i2,&s2,&i3,&s3,&i4}, { &i1,&s1,&i2,&s3,&i3,&s2,&i4 } };
for (i1 = a ; i1 < a + 4 ; i1++ ) {
for ( i2 = a ; i2 < a + 4; i2++ ) {
if ( i2 == i1 ) continue;
for ( i3 = a ;i3 < a + 4 ; i3++ ) {
if ( i3 == i1 || i3 == i2 ) continue;
i4 = a + 6-(i1-a)-(i2-a)-(i3-a);
for ( s1 = op ; s1 < op + 4 ; s1++ )
for ( s2 = op ; s2 < op + 4 ; s2++ )
for ( s3 = op ; s3 < op + 4 ; s3++ )
for ( m = 0; m < 5; m++ )
if ( calculate( intpt,sample[m]) == k ) {
printf( format[m], ** rule[m][0], ** rule[m][1],
** rule[m][2], ** rule[m][3], ** rule[m][4],
** rule[m][5], ** rule[m][6] );
return 1;
}
}
}
}
return 0;
}
main(){
int a[4];
printf ("Enter four numbers !");
scanf ("%d%d%d%d" ,&a[0], &a[1] ,&a[2] ,&a[3]);
if (search(a,24) == 0)
printf("No solution !!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -