近来观《编程之美》,收获颇多,整体上还是值得称道的,对读者思维的拓展和看问题的角度助益甚多,确能体会到编程之“美”,余观“一摞烙饼的排序”,感觉甚“爽”。但读此书过程中,发现此书略有瑕疵,虽瑕不掩瑜,还是决定在此予以指出(当然也可能是我弄错了呀):

1、本书风格不统一,建议代码全部改为伪码。

2、表述不够流畅,愿多加润色。

3、结构之法这章太简单。

4、发现书中的一些错误(打字错误就不在此指出了)和可以优化的地方,现贴在此:

(1)、在”NIM(3)两堆石头的游戏“中,代码有逻辑错误,下面是改正之后的代码(错误在注释中予以说明了):

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

bool nim(int x, int y)
{
    if(x == y) return true;
    if (x > y) {
        swap(x, y);
    }
    if (x == 1 && y == 2) {
        return false;
    }
    
    vector<int> iv;
    iv.push_back(2);
    int delta = 1;
    
    int n = 1;
    int b = 2;
    int addition = 0;
    while (x > n) {
        while (find(iv.begin(), iv.end(), ++n) != iv.end());
        ++delta;
        ++addition;
        b = n + delta;
        iv.push_back(b);
        
        if (iv.size() > 2 && addition >= 100) {
            iv.erase(remove_if(iv.begin(), iv.end(), bind2nd(less<int>(), n)), iv.end());
            addition = 0;
        }
    }
    if ((x != n) || y != b) {  //y != b 为改正之后的代码
        return true;
    }
    
    return false;
    
}

void tester1(int x, int y)
{
    if (nim(x, y)) {
        cout<<"("<<x<<", "<<y<<") Can Win"<<endl;
    }else{
        cout<<"("<<x<<", "<<y<<") Will lose"<<endl;
    }
}


bool nim2(int x, int y)
{
    if (x == y) {
        return true;
    }
    if (x > y) {
        swap(x, y);
    }
    
    double a = (1 + sqrt(5.0)) / 2;
    return x != (int)floor((y - x) * a);
}

void tester2(int x, int y)
{
    if (nim2(x, y)) {
        cout<<"("<<x<<", "<<y<<") Can Win"<<endl;
    }else{
        cout<<"("<<x<<", "<<y<<") Will lose"<<endl;
    }
}

int main(int argc, const char * argv[]) {
    cout<<"The Tester1:"<<endl;
    tester1(1, 2);
    tester1(3, 5);
    tester1(3, 6);
    tester1(8, 10);
    tester1(8, 13);
    tester1(50, 50);
    tester1(5000, 5555);
    cout<<"The Tester2:"<<endl;
    tester2(1, 2);
    tester2(3, 5);
    tester2(3, 6);
    tester2(8, 10);
    tester2(8, 13);
    tester2(50, 50);
    tester2(5000, 5555);
    return 0;
}
View Code

相关文章: