您的位置:首页 > 其它

project euler 42 Coded triangle numbers

2018-01-17 13:51 381 查看

题目:

https://projecteuler.net/problem=42

题意:

Coded triangle numbers

Problem 42

The nth term of the sequence of triangle numbers is given by, tn=½n(n+1); so the first ten triangle numbers are:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …

By converting each letter in a word to a number corresponding to its alphabetical position and adding these values we form a word value. For example, the word value for SKY is 19+11+25=55=t10. If the word value is a triangle number then we shall call the word a triangle word.

Using words.txt (right click and ‘Save Link/Target As…’), a 16K text file containing nearly two-thousand common English words, how many are triangle words?

编码三角形数

三角形数序列的第n项由公式tn=n(n+1)2给出;因此前十个三角形数是:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …

将一个单词的每个字母分别转化为其在字母表中的顺序并相加,我们可以计算出一个单词的值。例如,单词SKY的值就是 19+11+25=55=t10。如果一个单词的值是一个三角形数,我们就称这个单词为三角形单词。

在这个16K的文本文件words.txt (右击并选择“目标另存为……”)中包含有将近两千个常用英文单词,这其中有多少个三角形单词?

思路:

预先求个三角形数字的表,然后对每个单词求出其值,再用二分查找确定其是不是三角形单词

代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1000 + 10;

int triangle_number
;

void get_table(int n)
{
triangle_number[0] = 0;
int tot = 1;
for(int i = 1; i <= n; ++i)
triangle_number[i] = triangle_number[i-1] + tot++;
}
int main()
{
int n = 1000;
get_table(n);
//printf("%d\n", triangle_number
);
freopen("f://p042_words.txt", "r", stdin);
char ch;
int val = 0, ans = 0;
while((ch = getchar()) != -1)
{
if(isalpha(ch))
val += toupper(ch) - 'A' + 1;
else
{
if(val != 0 && binary_search(triangle_number + 1, triangle_number + 1 + n, val))
++ans;
val = 0;
}
}
printf("%d\n", ans);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: