|
|
发表于 2003-12-28 03:28:02
|
显示全部楼层
楼主的程序似乎复杂了一点,不过精神可嘉。程序首先就是要能正常的工作,然后才考虑到算法的问题,如果工作都不正常,算法再好也是徒然。
后来的一位兄弟帖的算法,恕小弟愚昧,实在是看不懂的说,竟然还有从ARRAY[-N]中读值的!
我自己调试了一个,工作似乎还正常,大家测试测试吧。
- /*
- * This is just a game,to calculate 24,only support +,-,*,/
- *
- * Suppose A,B,C,D are numbers, a,b,c are operaters,there are cases as
- * follow:
- *
- * (A a B) b C c D -> (E b C) c D, E b (C c D)
- * A a (B b C) c D -> (A a E) c D, A a (E c D)
- * A a B b (C c D) -> A a (B b E), (A a B) b E
- *
- * because E b (C c D) == (A a B) b E,there are only 5 cases.
- *
- * Fog,Sun Dec 28 03:13:15 2003
- *
- */
- #include "stdio.h"
- #define false 0
- #define true 1
- /* ((A a B) b C) c D */
- #define DUMP_RESULT1() \
- { \
- printf("((%1.0f %c %1.0f) %c %1.0f) %c %1.0f = 24\n", \
- a[p1],op[o1-1], \
- a[p2],op[o2-1], \
- a[p3],op[o3-1], \
- a[p4]); \
- found=true; \
- }
- /* (A a (B b C)) c D */
- #define DUMP_RESULT2() \
- { \
- printf("(%1.0f %c (%1.0f %c %1.0f)) %c %1.0f = 24\n", \
- a[p1],op[o1-1], \
- a[p2],op[o2-1], \
- a[p3],op[o3-1], \
- a[p4]); \
- found=true; \
- }
- /* A a ((B b C) c D) */
- #define DUMP_RESULT3() \
- { \
- printf("%1.0f %c ((%1.0f %c %1.0f) %c %1.0f) = 24\n", \
- a[p1],op[o1-1], \
- a[p2],op[o2-1], \
- a[p3],op[o3-1], \
- a[p4]); \
- found=true; \
- }
- /* A a (B b (C c D)) */
- #define DUMP_RESULT4() \
- { \
- printf("%1.0f %c (%1.0f %c (%1.0f %c %1.0f)) = 24\n", \
- a[p1],op[o1-1], \
- a[p2],op[o2-1], \
- a[p3],op[o3-1], \
- a[p4]); \
- found=true; \
- }
- /* (A a B) b (C c D) */
- #define DUMP_RESULT5() \
- { \
- printf("(%1.0f %c %1.0f) %c (%1.0f %c %1.0f) = 24\n", \
- a[p1],op[o1-1], \
- a[p2],op[o2-1], \
- a[p3],op[o3-1], \
- a[p4]); \
- found=true; \
- }
- float r(float a0, float a1, int o)
- {
- if (o == 1)
- return a0+a1;
- else if (o == 2)
- return a0-a1;
- else if (o == 3)
- return a0*a1;
- else if (o == 4)
- return a0/a1;
- return 0;
- }
- int main()
- {
- float a[4];
- char found = false;
- char op[4];
- int p1, p2, p3, p4;
- int o1,o2,o3;
-
- printf("Enter four number!\n");
- scanf("%f%f%f%f",&a[0],&a[1],&a[2],&a[3]);
-
- op[0] = '+';
- op[1] = '-';
- op[2] = '*';
- op[3] = '/';
-
- for(p1=0; p1<=3; p1++)
- {
- for(p2=0; p2<=3; p2++)
- {
- if (p2==p1)
- continue;
- else
- for(p3=0; p3<=3; p3++)
- {
- if ((p3==p2)||(p3==p1))
- continue;
- else{
- p4 = 6 - p1 - p2 - p3;
- for(o1=1; o1<=4; o1++)
- {
- if (found == true) break;
- for(o2=1; o2<=4; o2++)
- {
- if (found==true) break;
- for(o3=1; o3<=4; o3++)
- {
- if (found == true) break;
- if (r(r(r(a[p1],a[p2],o1),a[p3],o2),a[p4],o3)==24)
- {
- DUMP_RESULT1();
- break;
- }
- if (r(r(a[p1],r(a[p2],a[p3],o2),o1),a[p4],o3)==24)
- {
- DUMP_RESULT2();
- break;
- }
- if (r(a[p1],r(r(a[p2],a[p3],o2),a[p4],o3),o1)==24)
- {
- DUMP_RESULT3();
- break;
- }
- if (r(a[p1],r(a[p2],r(a[p3],a[p4],o3),o2),o1)==24)
- {
- DUMP_RESULT4();
- break;
- }
- if (r(r(a[p1],a[p2],o1),r(a[p3],a[p4],o3),o2)==24)
- {
- DUMP_RESULT5();
- break;
- }
- }
- }
- }
- }
- if (found == true) break;
- }
- }
- }
-
- if (found == false)
- printf("Ask god for the solution :-)\n");
- return 0;
- }
复制代码 |
|