一个西电的ACM竞赛题想到的 part2

来源:互联网 发布:数据分析 前景 编辑:程序博客网 时间:2024/05/17 02:01

程序如下, 详细信息参见part2部分。

#include <iostream>#include <vector>#include <algorithm>#include <fstream>#include <cstdlib>#include <string>using namespace std;void Count(vector<int> &myVec, int &Total, int Max);int main(){    int number;    string filePath;    int numberOfInstances;    int Max;    int Rings;    cout << "please input your file path: " ; //ie, D:\\sample    cin >> filePath;    ifstream fin;    fin.open(filePath.c_str());    if(fin.fail()) {        cout << "sorry, fail to open" << endl;        exit(1);    }    fin >> numberOfInstances;    vector<int> vect1;   for(int i = 0; i < numberOfInstances; i++) {        fin >> Rings;        fin >> Max;        for(int i = 0; i < Rings; i++) {            fin >> number;            vect1.push_back(number);        }        int totalCount = 0;        Count(vect1, totalCount, Max);        cout << totalCount << endl;        vect1.clear();        }    fin.close();    return 0;}void Count(vector<int> &myVec, int & Total, int Max) {    sort(myVec.begin(), myVec.end());    vector<int>::iterator mid;    vector<int>::iterator low;    vector<int>::iterator high;    for(mid = myVec.begin() + 1; mid != myVec.end() -1 ; mid++) {        high = mid + 1; // ie, high is always in the right of mid        low = mid;        while(low != myVec.begin()) {            low--;            for(high = mid + 1; high != myVec.end(); high++) {                if(*low + *mid + *high >= Max) {                    Total++;                }            }        }    }}

最开始编写程序的时候, 出现如下错误:



编译的时候, 只打印一个52, 就结束了。 为什么呢, 因为第二个i 在循环的时候, 结束是值为8, 所以不会继续执行外层循环。 我修改了半天, 就是没找到。 原因或许是忽略了for中的控制循环的变量的scope。 所以需要重新在内存循环中重新声明: int i = 0, 第二个解决办法, 为了避免出现理解上的困难, 可以直接将内层循环的控制循环的变量改为j。 我在stackoverflow中发出了帮助帖子, 得到的解答如下:



这位大叔除了高速我需要学会真正的调试技术外, 还之处程序中的一些改进办法, 就是最后使用vector的时候清空内容的时候直接使用vect1.empty() 函数, 而不是一个个pop _back() 。。

0 0
原创粉丝点击