* 期末考试 编程题#5:计算数组的低3位之和(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;for_each用法)

编程题#5:计算数组的低3位之和

来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

总时间限制: 1000ms 内存限制: 1024kB

描述
输入一个正整数构成的数组a[0], a[1], a[2], … , a[n-1], 计算它们的二进制低3位之和。

#include 
#include 
#include 
using namespace std;
// 在此处补充你的代码
int main(int argc, char* argv[]) {
        int v, my_sum=0;
        vector<int> vec;
        cin>>v;
        while ( v ) {
                vec.push_back(v);
                cin>>v;
        }
        for_each(vec.begin(), vec.end(), CMy_add(my_sum));
        cout<return 0;
}

输入
数组a,以0表示输入结束。

输出
一个整数 , 所输入数组各元素的二进制低3位之和。

样例输入

1 3 9 7 3 6 20 15 18 17 4 8 18 0

样例输出

41

程序解答:

#include 
#include 
#include 
using namespace std;

// 在此处补充你的代码
class CMy_add{
private:
    int &theValue;  //此处是引用
public:
    CMy_add(int& v) :theValue(v){}  //此处是引用
    void operator() (int& elem){
        theValue += elem%8;
    }
};

int main(int argc, char* argv[]) {
    int v, my_sum = 0;
    vector<int> vec;
    cin >> v;
    while (v) {
        vec.push_back(v);
        cin >> v;
    }
    for_each(vec.begin(), vec.end(), CMy_add(my_sum));
    //for_each 用法示例
    //http://zh.cppreference.com/w/cpp/algorithm/for_each
    //其中 auto print = [](const int& n) { std::cout << " " << n; }; 是Lambda表达式(C++11)

    //http://blog.csdn.net/u010579068/article/details/50511052
    //http://blog.csdn.net/u014613043/article/details/50619254

    cout << my_sum << endl;

    return 0;
}

你可能感兴趣的:(Coursera,程序设计与算法(专项课程))