Coded triangle numbers
The nth term of the sequence of triangle numbers is given by, tn = 1/2n(n+1); so the first ten triangle numbers are:
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 = 1/2n(n+1)给出;因此前十个三角形数是:
在这个16K的文本文件words.txt (右击并选择“目标另存为……”)中包含有将近两千个常用英文单词,这其中有多少个三角形单词?
//(Problem 42)Coded triangle numbers
// Completed on Tue, 19 Nov 2013, 03:34
// Language: C11
//
// 版权所有(C)wu yudong
// 博客地址:http://www.wuyudong.com
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
bool test(int n)
{
int m;
m = (int)sqrt(n * 2);
if(m * (m + 1) == 2 * n) return true;
else return false;
}
int count(char * s)
{
int i = 0;
int sum = 0;
while(s[i] != '\0') {
sum += s[i] - 'A' + 1;
i++;
}
return sum;
}
void solve(void)
{
FILE *fp;
int i, j, k;
char *s, c;
int sum = 0;
char a[20];
fp = fopen("words.txt", "r");
fseek(fp, 0, SEEK_END);
int file_size;
file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
s = (char*)malloc(file_size * sizeof(char));
fread(s, sizeof(char), file_size, fp);
i = j = k = 0;
while(i <= file_size) {
c = s[i++];
if(!isalpha(c)) {
if(c == ',') {
j = 0;
if(test(count(a))) sum++;
memset(a,'\0', 20 * sizeof(char));
}
} else {
a[j++] = c;
}
}
if(test(count(a))) sum++;
memset(a,'\0',20 * sizeof(char));
printf("%d\n",sum);
}
int main(void)
{
solve();
return 0;
}
Answer:153
Completed on Wed, 12 Feb 2014, 12:45
Comments