Project Euler 42

三角数のn項は t_n = 1/2*n(n+1)で与えられる. 最初の10項は

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
である.

単語中のアルファベットを数値に変換した後に和をとる. この和を「単語の値」と呼ぶことにする. 例えば SKY は 19 + 11 + 25 = 55 = t_10である. 単語の値が三角数であるとき, その単語を三角語と呼ぶ.

16Kのテキストファイル word.txt 中に約2000語の英単語が記されている. 三角語はいくつあるか?

[C/C++]

#include <iostream>
#include <fstream>
#include <string>
#include <boost/algorithm/string.hpp>
using namespace std;

int tri[20];

bool is_member(int n){
	for(int i=0 ; i<20 ; i++){
		if(tri[i] == n) return true;
	}
	return false;
}

int main(){
	deque<string> dat,dat2;
	ifstream ifs("dat042.txt");
	string str;

	//三角数生成
	for(int i=0 ; i<20 ; i++){
		tri[i] = i*(i+1)/2;
	}


	ifs >> str;
	dat.push_back(str);
	// datにstrを " または , で区切り格納
	boost::algorithm::split(dat, str, boost::is_any_of("\","));


	for(int i=0 ; i<(signed)dat.size() ; i++){
		if(dat[i]!="") dat2.push_back(dat[i]);
	}

	int num=0;
	int k;
	char c;

	for(int i=0 ;i<dat2.size() ; i++){
		k=0;
		for(int j=0 ; j<(signed)dat2[i].size() ; j++){
			c = dat2[i].at(j);
			k += c-64;
		}

		if(is_member(k)) num++;
	}

	cout << num << endl;

	int end;
	cin >> end;
}

いやぁこれはひどい。is_memberってvectorとかにありそうなもんだけど、見つけられなかった・・・