首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

自创C语言填表式编码风格。欢迎大家用各种语言及其编码风格来PK!解决办法

2012-02-26 
自创C语言填表式编码风格。欢迎大家用各种语言及其编码风格来PK!C语言自由的编码风格是一把双刃剑。用不好会

自创C语言填表式编码风格。欢迎大家用各种语言及其编码风格来PK!
C语言自由的编码风格是一把双刃剑。
用不好会千人千面;用好了能结出下面这朵“奇葩”:(^_^)
大家谁感兴趣可以试试在完成相同功能的前提下用各种语言及其编码风格来PK一下。

C/C++ code
//定义下面5种运算顺序:// ((A   @   B)  @   C)  @   D//  (A   @   B)  @  (C   @   D)//  (A   @  (B   @   C)) @   D//   A   @ ((B   @   C)  @   D)//   A   @  (B   @  (C   @   D))//23.99<计算结果<24.01//其中://1≤A、B、C、D≤13//@为“+、-、*、/”之一//用浮点数计算,循环遍历以上所有情况即可。#include <stdio.h>int A,B,C,D,N;float r,r1,r2;char op1,op2,op3;char opc[4]={'+','-','*','/'};void main() {    N=0;    for (A=1;A<=13;A++) {    for (B=1;B<=13;B++) {    for (C=1;C<=13;C++) {    for (D=1;D<=13;D++) {    for (op1=0;op1<4;op1++) {    for (op2=0;op2<4;op2++) {    for (op3=0;op3<4;op3++) {        // ((A   @   B)  @   C)  @   D        r=(float)A;        switch (op1) {case 0:r =r +B ;break;case 1:r =r -B ;break;case 2:r =r *B ;break;case 3:r =r /B ;break;}        switch (op2) {case 0:r =r +C ;break;case 1:r =r -C ;break;case 2:r =r *C ;break;case 3:r =r /C ;break;}        switch (op3) {case 0:r =r +D ;break;case 1:r =r -D ;break;case 2:r =r *D ;break;case 3:r =r /D ;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: ((%2d%c%2d)%c%2d)%c%2d=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}        //  (A   @   B)  @  (C   @   D)        r1=(float)A;        switch (op1) {case 0:r1=r1+B ;break;case 1:r1=r1-B ;break;case 2:r1=r1*B ;break;case 3:r1=r1/B ;break;}        r2=(float)C;        switch (op3) {case 0:r2=r2+D ;break;case 1:r2=r2-D ;break;case 2:r2=r2*D ;break;case 3:r2=r2/D ;break;}        switch (op2) {case 0:r =r1+r2;break;case 1:r =r1-r2;break;case 2:r =r1*r2;break;case 3:if (-0.01f<r2 && r2<0.01f) goto STEP3; r=r1/r2;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: (%2d%c%2d)%c(%2d%c%2d)=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}        //  (A   @  (B   @   C)) @   D    STEP3:        r=(float)B;        switch (op2) {case 0:r =r +C ;break;case 1:r =r -C ;break;case 2:r =r *C ;break;case 3:r =r /C ;break;}        switch (op1) {case 0:r =A +r ;break;case 1:r =A -r ;break;case 2:r =A *r ;break;case 3:if (-0.01f<r  && r <0.01f) goto STEP4; r=A /r ;break;}        switch (op3) {case 0:r =r +D ;break;case 1:r =r -D ;break;case 2:r =r *D ;break;case 3:r =r /D ;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: (%2d%c(%2d%c%2d))%c%2d=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}        //   A   @ ((B   @   C)  @   D)    STEP4:        r=(float)B;        switch (op2) {case 0:r =r +C ;break;case 1:r =r -C ;break;case 2:r =r *C ;break;case 3:r =r /C ;break;}        switch (op3) {case 0:r =r +D ;break;case 1:r =r -D ;break;case 2:r =r *D ;break;case 3:r =r /D ;break;}        switch (op1) {case 0:r =A +r ;break;case 1:r =A -r ;break;case 2:r =A *r ;break;case 3:if (-0.01f<r  && r <0.01f) goto STEP5; r=A /r ;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: %2d%c((%2d%c%2d)%c%2d)=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}        //   A   @  (B   @  (C   @   D))    STEP5:        r=(float)C;        switch (op3) {case 0:r =r +D ;break;case 1:r =r -D ;break;case 2:r =r *D ;break;case 3:r =r /D ;break;}        switch (op2) {case 0:r =B +r ;break;case 1:r =B -r ;break;case 2:r =B *r ;break;case 3:if (-0.01f<r  && r <0.01f) continue;   r=B /r ;break;}        switch (op1) {case 0:r =A +r ;break;case 1:r =A -r ;break;case 2:r =A *r ;break;case 3:if (-0.01f<r  && r <0.01f) continue;   r=A /r ;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: %2d%c(%2d%c(%2d%c%2d))=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}    }    }    }    }    }    }    }}//     1: (( 1+ 1)+ 1)* 8=24//     2: ( 1+( 1+ 1))* 8=24//     3: ( 1+ 1)*( 1+11)=24// ... ...// 53280: (13+13)/(13/12)=24// 53281: (13-(13/13))+12=24// 53282: 13-((13/13)-12)=24 



[解决办法]
先膜拜一下赵老师
[解决办法]
风格是种信仰
[解决办法]
顶一个的LZ。。。。赵老师,就是非常之有风格。
[解决办法]
速算24...支持下
[解决办法]
膜拜赵老师

[解决办法]
C++ 的
C/C++ code
#include<stdio.h>#include<algorithm>using namespace std;typedef float ( __cdecl *TYPE_MYFUN )( float , float );float FunAdd( float x, float y ){    return x + y;}float FunSub( float x, float y ){    return x - y;}float FunMul( float x, float y ){    return x * y;}float FunDiv( float x, float y ){    return x / y;}int main( int argc, char* argv[] ){    float Num[4] = { 3 , 3 , 8 , 8 };//答案为 8/(3-8/3) ;    //float Num[4] = { 5 , 5 , 5 , 1 };//答案为5/(5-(1/5));    sort( Num , Num + 4 );    static char op[4] = { '+' , '-' , '*' , '/'};    TYPE_MYFUN Fun[4] = { FunAdd , FunSub , FunMul , FunDiv };    do    {        for( int x = 0 ; x < 4 ; x++ )        {            for( int y = 0 ; y < 4 ; y++ )            {                for( int z = 0 ; z < 4 ; z++ )                {                    float sum = Fun[z]( Fun[y]( Fun[x]( Num[0], Num[1] ) , Num[2] ) , Num[3] );                    if( ( sum > 23.9 ) && ( sum < 24.1 ) )                    {                        printf( "((%d%c%d)%c%d)%c%d", ( int )Num[0], op[x] , ( int )Num[1], op[y] , ( int )Num[2], op[z], ( int )Num[3] );                        return 0;                    }                    sum =  Fun[z](   Fun[x]( Num[0], Num[1] ) , Fun[y]( Num[2] , Num[3] ) );                    if( ( sum > 23.9 ) && ( sum < 24.1 ) )                    {                        printf( "(%d%c%d)%c(%d%c%d)", ( int )Num[0], op[x] , ( int )Num[1], op[z] , ( int )Num[2], op[y], ( int )Num[3] );                        return 0;                    }                    sum =  Fun[z]( Num[0] , Fun[y]( Num[1] , Fun[x]( Num[2], Num[3] ) ) );                    if( ( sum > 23.9 ) && ( sum < 24.1 ) )                    {                        printf( "%d%c(%d%c(%d%c%d))", ( int )Num[0], op[z] , ( int )Num[1], op[y] , ( int )Num[2], op[x], ( int )Num[3] );                        return 0;                    }                }            }        }    }while( next_permutation( Num , Num + 4 ) );    return 0;}
[解决办法]
好膜拜赵老师

[解决办法]
膜拜赵老师

[解决办法]
C/C++ code
    for (A=1;A<=13;A++) {    for (B=1;B<=13;B++) {    for (C=1;C<=13;C++) {    for (D=1;D<=13;D++) {    for (op1=0;op1<4;op1++) {    for (op2=0;op2<4;op2++) {    for (op3=0;op3<4;op3++) {
[解决办法]
C/C++ code
#include <stdio.h>float Number[4];char Option[3];char OptionList[4] ={ '+', '-', '*', '/'};int N = 0;float FuncSwitch(float A, int Opt, float B) {    float Ret;    switch (Opt) {        case '+' : Ret = A + B;break;        case '-' : Ret = A - B;break;        case '*' : Ret = A * B;break;        default     : Ret = (B > -0.01f && B < 0.01f) ? -12345678.9 : A / B;break;    }    return Ret;}void FuncCalcul() {    float r;    r = FuncSwitch(FuncSwitch(FuncSwitch(Number[0], Option[0], Number[1]), Option[1], Number[2]), Option[2], Number[3]);    if (23.99f<r && r<24.01f) {N++;printf("%8d: ((%2d%c%2d)%c%2d)%c%2d=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}    r = FuncSwitch(FuncSwitch(Number[0], Option[0], Number[1]), Option[1], FuncSwitch(Number[2], Option[2], Number[3]));    if (23.99f<r && r<24.01f) {N++;printf("%8d: (%2d%c%2d)%c(%2d%c%2d)=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}    r = FuncSwitch(FuncSwitch(Number[0], Option[0], FuncSwitch(Number[1], Option[1], Number[2])), Option[2], Number[3]);    if (23.99f<r && r<24.01f) {N++;printf("%8d: (%2d%c(%2d%c%2d))%c%2d=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}    r = FuncSwitch(Number[0], Option[0], FuncSwitch(FuncSwitch(Number[1], Option[1], Number[2]), Option[2], Number[3]));    if (23.99f<r && r<24.01f) {N++;printf("%8d: %2d%c((%2d%c%2d)%c%2d)=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}    r = FuncSwitch(Number[0], Option[0], FuncSwitch(Number[1], Option[1], FuncSwitch(Number[2], Option[2], Number[3])));    if (23.99f<r && r<24.01f) {N++;printf("%8d: %2d%c(%2d%c(%2d%c%2d))=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}}void FuncOption(int OptionCount) {    int i = 0;    if(OptionCount == 3) {        FuncCalcul();    } else {        for (i = 0; i <= 3; i++) {            Option[OptionCount] = OptionList[i];            FuncOption(OptionCount + 1);        }    }}void FuncNumber(int NumberCount) {    int i = 0;    if (NumberCount == 4) {        FuncOption(0);    } else {        for (i = 1; i <= 13; i++) {            Number[NumberCount] = (float)i;            FuncNumber(NumberCount + 1);        }    }}int main() {    FuncNumber(0);    return 0;} 


[解决办法]
这种风格还是第一次看到。。很另类
[解决办法]
还是 python 的看起来更简洁~~~

Python code
from __future__ import divisionoperator = ('+', '-', '*', '/')N = 1def factors():    for A in xrange(1, 14):        for B in xrange(1, 14):            for C in xrange(1, 14):                for D in xrange(1, 14):                    yield A, B, C, Ddef opers():    for op1 in xrange(0, 4):        for op2 in range(0, 4):            for op3 in range(0, 4):                yield operator[op1], operator[op2], operator[op3]                def check_res(fmt, A, B, C, D, op1, op2, op3):    global N     sumexp = fmt % (A, op1, B, op2, C, op3, D)    try:        sum = eval(sumexp)    except ZeroDivisionError:        return        if sum > 23.99 and sum < 24.01:        print N, sumexp, "=24"        N += 1                def main():    fact = factors()    for A, B, C, D in fact:        oper = opers()        for op1, op2, op3 in oper:            # ((A   @   B)  @   C)  @   D            check_res("((%d%s%d)%s%d)%s%d", A, B, C, D, op1, op2, op3)            #  (A   @   B)  @  (C   @   D)            check_res("(%d%s%d)%s(%d%s%d)", A, B, C, D, op1, op2, op3)            #  (A   @  (B   @   C)) @   D            check_res("(%d%s(%d%s%d))%s%d", A, B, C, D, op1, op2, op3)            #   A   @ ((B   @   C)  @   D)            check_res("%d%s((%d%s%d)%s%d)", A, B, C, D, op1, op2, op3)            #   A   @  (B   @  (C   @   D))            check_res("%d%s(%d%s(%d%s%d))", A, B, C, D, op1, op2, op3)if __name__ == "__main__":    main()
[解决办法]
挺美的。
[解决办法]
探讨

尽量对齐所有能对齐的同类元素使代码呈现类似文本表格那样的清晰度。
代码架子搭好后可看作是表格线,有细微区别的地方填写不同的内容可看作是表格内容。
这就是“填表式编码风格”的妙处。不知谁体会到其精髓了。
另外这样编码的好处之一就是利用文本编辑器支持的列块复制、列块剪切、列块插入粘贴、列块覆盖粘贴等功能编写、修改代码时有一种用剪子剪报拼贴成新版面的快感!
(^_^)

[解决办法]
奇葩
[解决办法]
探讨

风格是种信仰

[解决办法]
果然奇葩~~~~~~
[解决办法]
好爱好爱好奥好
[解决办法]
个人感觉楼主的for循环用的太多了,可将“加,减,乘,除”进行优化。14L,18L的比较不错

楼主风格还是不错的,看的比较舒服,呵呵~~
[解决办法]
遍历24点的所有可能性?
[解决办法]

看着像艺术。。
[解决办法]
支持一下,赵老师来论坛也好久了,还是很佩服的

探讨

求版主把上面yuluyangguang发错的帖子删除吧。

[解决办法]
探讨

膜拜,收藏,飘过。。。

[解决办法]
有好几种书说编码的,
<高质量编程><简洁代码>
[解决办法]
发现好几位大神来着~
[解决办法]
怎一个牛字了得
------解决方案--------------------


都是牛人列。。。。。
[解决办法]

探讨

C/C++ code

for (A=1;A<=13;A++) {
for (B=1;B<=13;B++) {
for (C=1;C<=13;C++) {
for (D=1;D<=13;D++) {
for (op1=0;op1<4;op1++) {
for (op2=0;op2<4;op2++) {
for (op3=0;op3<4;o……

[解决办法]
探讨

引用:

C/C++ code

for (A=1;A<=13;A++) {
for (B=1;B<=13;B++) {
for (C=1;C<=13;C++) {
for (D=1;D<=13;D++) {
for (op1=0;op1<4;op1++) {
for (op2=0;op2<4;op2++) {
for (op3=0;op3……

[解决办法]
LZ的发言风格和SP1234有些类似,膜拜一下
[解决办法]
有一些情况是算不出24的。。 比如4个A和一个2.。。。 要把不可能成功的单独提练出来。。。。

楼主用的穷举,应该把不能算出来的也穷举一遍。。。
[解决办法]
我的是用逆波兰用算求的,可是结果只有两万多个而楼主的有5万多个。
希望大家看看有什么地方不对
[code=C/C++][/code]
#include <stdio.h>

int rpn (int *);

int main (void)
{
int A, B, C, D, N;
int c[8];
int op1, op2, op3;
char opc[4] = {'+', '-', '*', '/'};

N = 0;
for (A = 1; A <= 13; A++){
for (B = 1; B <= 13; B++){
for (C = 1; C <= 13; C++){
for (D = 1; D <= 13; D++){
for (op1 = 0; op1 < 4; op1++){
for (op2 = 0; op2 < 4; op2++){
for (op3 = 0; op3 < 4; op3++){
c[0] = A; c[1] = B; c[2] = opc[op1]; c[3] = C;
c[4] = opc[op2]; c[5] = D; c[6] = opc[op3]; c[7] = 0;
if (rpn(c) == 0){
N++;
printf ("%8d: ((%2d%c%2d)%c%2d)%c%2d = 24\n", N, A, opc[op1], B,
opc[op2], C, opc[op3], D);
}
c[0] = A; c[1] = B; c[2] = opc[op1]; c[3] = C;
c[4] = D; c[5] = opc[op2]; c[6] = opc[op3]; c[7] = 0;
if (rpn(c) == 0){
N++;
printf ("%8d: (%2d%c%2d)%c(%2d%c%2d) = 24\n", N, A, opc[op1], B,
opc[op3], C, opc[op2], D);
}
c[0] = A; c[1] = B; c[2] = C; c[3] = opc[op1];
c[4] = opc[op2]; c[5] = D; c[6] = opc[op3]; c[7] = 0;
if (rpn(c) == 0){
N++;
printf ("%8d: (%2d%c(%2d%c%2d))%c%2d = 24\n", N, A, opc[op2], B,
opc[op1], C, opc[op3], D);
}
c[0] = A; c[1] = B; c[2] = C; c[3] = opc[op1];
c[4] = D; c[5] = opc[op2]; c[6] = opc[op3]; c[7] = 0;
if (rpn(c) == 0){
N++;
printf ("%8d: %2d%c((%2d%c%2d)%c%2d) = 24\n", N, A, opc[op3], B,
opc[op1], C, opc[op2], D);
}
c[0] = A; c[1] = B; c[2] = C; c[3] = D;
c[4] = opc[op1]; c[5] = opc[op2]; c[6] = opc[op3]; c[7] = 0;
if (rpn(c) == 0){
N++;
printf ("%8d: %2d%c(%2d%c(%2d%c%2d)) = 24\n", N, A, opc[op3], B,
opc[op2], C, opc[op1], D);
}
}
}
}
}
}
}
}
return 0;
}

#define MAXVAL 10

int sp;
double val[MAXVAL];

void push (double f)
{
val[sp++] = f;
}

double pop (void)
{
return val[--sp];
}

int rpn (int *c)
{
double op2;
int ch;

sp = 0;
while (1){
ch = *c++;
switch (ch){
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
case '-':
op2 = pop();
push(pop() - op2);
break;
case '/':
op2 = pop();
if (op2 != 0.00)
push(pop() / op2);
else
return 1;
break;
case 0:
op2 = pop();


if (23.99 < op2 && op2 < 24.01)
return 0;
else 
return 1;
break;
default:
push((double)(ch - 0));
break;
}
}
}
[解决办法]

C/C++ code
#include <stdio.h>int A,B,C,D,N;float r,r1,r2;char op1,op2,op3;char opc[4]={'+','-','*','/'};void main() {    N=0;    for (A=1;A<=13;A++) {    for (B=1;B<=13;B++) {    for (C=1;C<=13;C++) {    for (D=1;D<=13;D++) {    for (op1=0;op1<4;op1++) {    for (op2=0;op2<4;op2++) {    for (op3=0;op3<4;op3++) {        // ((A   @   B)  @   C)  @   D        r=(float)A;        switch (op1) {case 0:r =r +B ;break;case 1:r =r -B ;break;case 2:r =r *B ;break;case 3:r =r /B ;break;}        switch (op2) {case 0:r =r +C ;break;case 1:r =r -C ;break;case 2:r =r *C ;break;case 3:r =r /C ;break;}        switch (op3) {case 0:r =r +D ;break;case 1:r =r -D ;break;case 2:r =r *D ;break;case 3:r =r /D ;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: ((%2d%c%2d)%c%2d)%c%2d=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}        //  (A   @   B)  @  (C   @   D)        r1=(float)A;        switch (op1) {case 0:r1=r1+B ;break;case 1:r1=r1-B ;break;case 2:r1=r1*B ;break;case 3:r1=r1/B ;break;}        r2=(float)C;        switch (op3) {case 0:r2=r2+D ;break;case 1:r2=r2-D ;break;case 2:r2=r2*D ;break;case 3:r2=r2/D ;break;}        switch (op2) {case 0:r =r1+r2;break;case 1:r =r1-r2;break;case 2:r =r1*r2;break;case 3:if (-0.01f<r2 && r2<0.01f) goto STEP3; r=r1/r2;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: (%2d%c%2d)%c(%2d%c%2d)=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}        //  (A   @  (B   @   C)) @   D    STEP3:        r=(float)B;        switch (op2) {case 0:r =r +C ;break;case 1:r =r -C ;break;case 2:r =r *C ;break;case 3:r =r /C ;break;}        switch (op1) {case 0:r =A +r ;break;case 1:r =A -r ;break;case 2:r =A *r ;break;case 3:if (-0.01f<r  && r <0.01f) goto STEP4; r=A /r ;break;}        switch (op3) {case 0:r =r +D ;break;case 1:r =r -D ;break;case 2:r =r *D ;break;case 3:r =r /D ;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: (%2d%c(%2d%c%2d))%c%2d=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}        //   A   @ ((B   @   C)  @   D)    STEP4:        r=(float)B;        switch (op2) {case 0:r =r +C ;break;case 1:r =r -C ;break;case 2:r =r *C ;break;case 3:r =r /C ;break;}        switch (op3) {case 0:r =r +D ;break;case 1:r =r -D ;break;case 2:r =r *D ;break;case 3:r =r /D ;break;}        switch (op1) {case 0:r =A +r ;break;case 1:r =A -r ;break;case 2:r =A *r ;break;case 3:if (-0.01f<r  && r <0.01f) goto STEP5; r=A /r ;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: %2d%c((%2d%c%2d)%c%2d)=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}        //   A   @  (B   @  (C   @   D))    STEP5:        r=(float)C;        switch (op3) {case 0:r =r +D ;break;case 1:r =r -D ;break;case 2:r =r *D ;break;case 3:r =r /D ;break;}        switch (op2) {case 0:r =B +r ;break;case 1:r =B -r ;break;case 2:r =B *r ;break;case 3:if (-0.01f<r  && r <0.01f) continue;   r=B /r ;break;}        switch (op1) {case 0:r =A +r ;break;case 1:r =A -r ;break;case 2:r =A *r ;break;case 3:if (-0.01f<r  && r <0.01f) continue;   r=A /r ;break;}        if (23.99f<r && r<24.01f) {N++;printf("%8d: %2d%c(%2d%c(%2d%c%2d))=24\n",N,A,opc[op1],B,opc[op2],C,opc[op3],D);}    }    }    }    }    }    }    }}
[解决办法]
我弱爆了....
[解决办法]
路过, 不多说啦;

------解决方案--------------------


javascript版多方便,浏览器打开就算了。

不止算24另外5个6个数也可以算。

http://jsbin.com/oqokeb/edit#preview
http://fiddle.jshell.net/zswang/GaF3G/show/

JScript code
<!DOCTYPE html><html><head>  <meta http-equiv="content-type" content="text/html; charset=UTF-8">  <title>demo by zswang</title><script type='text/javascript' src='http://code.jquery.com/jquery-1.6.4.js'></script><script type='text/javascript'>//<![CDATA[ $(window).load(function(){function searchExpression(dest, numbers) {    if (!numbers) return;    var precision = 1e-6; // 精度    var dict = {};        function search(numbers, expressions, level, dest, outputs) {        var result;        if ((level <= 1) && (Math.abs(numbers[0] - dest) <= precision)) {            !dict[expressions[0]] && outputs.push(expressions[0]);            dict[expressions[0]] = true;            return true;        }        for (var i = 0; i < level; i++) {            for (var j = i + 1; j < level; j++) {                var A = numbers[i];                var B = numbers[j];                numbers[j] = numbers[level - 1];                var vExpA = expressions[i];                var vExpB = expressions[j];                expressions[j] = expressions[level - 1];                expressions[i] = '(' + vExpA + '+' + vExpB + ')';                numbers[i] = A + B;                if (search(numbers, expressions,                    level - 1, dest, outputs)) Result = true;                expressions[i] = '(' + vExpA + '-' + vExpB + ')';                numbers[i] = A - B;                if (search(numbers, expressions,                    level - 1, dest, outputs)) Result = true;                expressions[i] = '(' + vExpB + '-' + vExpA + ')';                numbers[i] = B - A;                if (search(numbers, expressions,                    level - 1, dest, outputs)) result = true;                expressions[i] = '(' + vExpA + '*' + vExpB + ')';                numbers[i] = A * B;                if (search(numbers, expressions,                    level - 1, dest, outputs)) result = true;                if (B != 0) {                    expressions[i] = '(' + vExpA + '/' + vExpB + ')';                    numbers[i] = A / B;                    if (search(numbers, expressions,                        level - 1, dest, outputs)) result = true;                }                if (A != 0) {                    expressions[i] = '(' + vExpB + '/' + vExpA + ')';                    numbers[i] = B / A;                    if (search(numbers, expressions,                        level - 1, dest, outputs)) result = true;                }                numbers[i] = A;                numbers[j] = B;                expressions[i] = vExpA;                expressions[j] = vExpB;            }        }        return result;    }        if (typeof numbers == "string") {        numbers = numbers.split(/[\s,;g]+/);    }    var expressions = [];    var outputs = [];    for (var i = 0; i < numbers.length; i++) {        numbers[i] = +numbers[i];        expressions.push(numbers[i]);    }    search(numbers, expressions, numbers.length, dest, outputs);    return outputs;}$("#go").click(function() {    var outputs = searchExpression(+$("#dest").val(), $("#inputs").val());    $("#outputs").val(outputs && outputs.join("\n"));});});//]]>  </script></head><body>  <body>  <div>    目标数:<input id="dest" value="24"/>    数组:<input id="inputs" value="10,10,4,4"/><input type="button" id="go" value="计算吧!"/></div><div>    <textarea id="outputs"></textarea></div></body></html>
------解决方案--------------------


javascript -> eval(object)


[解决办法]
久闻赵老师大名,百闻不如一见啊
[解决办法]

探讨

求版主把上面yuluyangguang发错的帖子删除吧。

[解决办法]
神马。。。。
[解决办法]
感觉自己要走的路还很长……
[解决办法]
题目有点难
[解决办法]
include <stdio.h>
float Number[4];
char Option[3];
char OptionList[4] ={ '+', '-', '*', '/'};
int N = 0;
float FuncSwitch(float A, int Opt, float B) {
float Ret;
switch (Opt) {
case '+' : Ret = A + B;break;
case '-' : Ret = A - B;break;
case '*' : Ret = A * B;break;
default : Ret = (B > -0.01f && B < 0.01f) ? -12345678.9 : A / B;break;
}
return Ret;
}

void FuncCalcul() {
float r;
r = FuncSwitch(FuncSwitch(FuncSwitch(Number[0], Option[0], Number[1]), Option[1], Number[2]), Option[2], Number[3]);
if (23.99f<r && r<24.01f) {N++;printf("%8d: ((%2d%c%2d)%c%2d)%c%2d=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}
r = FuncSwitch(FuncSwitch(Number[0], Option[0], Number[1]), Option[1], FuncSwitch(Number[2], Option[2], Number[3]));
if (23.99f<r && r<24.01f) {N++;printf("%8d: (%2d%c%2d)%c(%2d%c%2d)=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}
r = FuncSwitch(FuncSwitch(Number[0], Option[0], FuncSwitch(Number[1], Option[1], Number[2])), Option[2], Number[3]);
if (23.99f<r && r<24.01f) {N++;printf("%8d: (%2d%c(%2d%c%2d))%c%2d=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}
r = FuncSwitch(Number[0], Option[0], FuncSwitch(FuncSwitch(Number[1], Option[1], Number[2]), Option[2], Number[3]));
if (23.99f<r && r<24.01f) {N++;printf("%8d: %2d%c((%2d%c%2d)%c%2d)=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}
r = FuncSwitch(Number[0], Option[0], FuncSwitch(Number[1], Option[1], FuncSwitch(Number[2], Option[2], Number[3])));
if (23.99f<r && r<24.01f) {N++;printf("%8d: %2d%c(%2d%c(%2d%c%2d))=24\n",N,(int)Number[0],Option[0],(int)Number[1],Option[1],(int)Number[2],Option[2],(int)Number[3]);}
}

void FuncOption(int OptionCount) {
int i = 0;
if(OptionCount == 3) {
FuncCalcul();
} else {
for (i = 0; i <= 3; i++) {
Option[OptionCount] = OptionList[i];
FuncOption(OptionCount + 1);
}
}
}

void FuncNumber(int NumberCount) {
int i = 0;
if (NumberCount == 4) {
FuncOption(0);
} else {
for (i = 1; i <= 13; i++) {
Number[NumberCount] = (float)i;
FuncNumber(NumberCount + 1);
}
}
}
int main() {
FuncNumber(0);
return 0;
}
这个好
[解决办法]
是啊,风格也是人为的。。。
[解决办法]
好多高手
[解决办法]
再来个稍微bt点的
C++11版的
C/C++ code
#include<stdio.h>#include<algorithm>#include<Functional>using namespace std;typedef std::pair<function<float(float,float)>,char> Type;Type f[4] = { Type([](float x,float y ){return x+y;},'+'), Type([](float x,float y ){return x-y;},'-') ,Type([](float x,float y ){return x*y;},'*') , Type([](float x,float y ){return x/y;},'/') };float Num[4] = { 3 , 3 , 8 , 8 };//答案为 8/(3-8/3) ;int main( int argc, char* argv[] ){    sort( Num , Num + 4 );    do    {        for_each( f , f+4 , [=](Type x)            {                for_each( f,f+4, [=](Type y)                    {                        for_each( f,f+4, [=](Type z)                            {                                float sum = z.first( y.first( x.first( Num[0], Num[1] ) , Num[2] ) , Num[3] );                                if( ( sum > 23.9 ) && ( sum < 24.1 ) )                                {                                    printf( "((%d%c%d)%c%d)%c%d", ( int )Num[0], x.second , ( int )Num[1], y.second , ( int )Num[2], z.second, ( int )Num[3] );                                    exit(0);                                }                                sum =  z.first( x.first( Num[0], Num[1] ) , y.first( Num[2] , Num[3] ) );                                if( ( sum > 23.9 ) && ( sum < 24.1 ) )                                {                                    printf( "(%d%c%d)%c(%d%c%d)", ( int )Num[0], x.second , ( int )Num[1], z.second , ( int )Num[2], y.second, ( int )Num[3] );                                    exit(0);                                }                                sum =  z.first( Num[0] , y.first( Num[1] , x.first( Num[2], Num[3] ) ) );                                if( ( sum > 23.9 ) && ( sum < 24.1 ) )                                {                                    printf( "%d%c(%d%c(%d%c%d))", ( int )Num[0], z.second , ( int )Num[1], y.second , ( int )Num[2], x.second, ( int )Num[3] );                                    exit(0);                                }                            }                        );                    }                );            }        );    }while( next_permutation( Num , Num + 4 ) );    return 0;} 


[解决办法]
新来的能不能发点不同看法

for (A =1;A <=13;A ++) {
for (B =1;B <=13;B ++) {
for (C =1;C <=13;C ++) {
for (D =1;D <=13;D ++) {
for (op1=0;op1< 4;op1++) {
for (op2=0;op2< 4;op2++) {
for (op3=0;op3< 4;op3++) {

看起来很舒服,但是真要看调试或者修改bug的话,这样的结构似乎不好看出嵌套的层次结构 
以上完全我个人看法,
[解决办法]
我觉得这只能叫adaption而不是style
[解决办法]

探讨
C++ 的

C/C++ code
#include<stdio.h>
#include<algorithm>
using namespace std;

typedef float ( __cdecl *TYPE_MYFUN )( float , float );
float FunAdd( float x, float y )
{
return x + y;
}
...

[解决办法]
探讨
C语言自由的编码风格是一把双刃剑。
用不好会千人千面;用好了能结出下面这朵“奇葩”:(^_^)
大家谁感兴趣可以试试在完成相同功能的前提下用各种语言及其编码风格来PK一下。

C/C++ code

//定义下面5种运算顺序:
// ((A @ B) @ C) @ D
// (A @ B) @ (C @ D)
// (A @ (B……

热点排行