zoukankan      html  css  js  c++  java
  • (Problem 42)Coded triangle numbers

    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); 因此前十个三角形数是:

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

    通过将一个单词中每个字母在字母表中的位置值加起来,我们可以将一个单词转换为一个数。例如,单词SKY的值为19 + 11 + 25 = 55 = t10。如果单词的值是一个三角形数,我们称这个单词为三角形单词。

    words.txt (右键另存为)是一个16K的文本文件,包含将近两千个常用英语单词。在这个文件中,一共有多少个三角形词?

    //(Problem 42)Coded triangle numbers
    // Completed on Tue, 19 Nov 2013, 03:34
    // Language: C11
    //
    // 版权所有(C)acutus   (mail: acutus@126.com) 
    // 博客地址:http://www.cnblogs.com/acutus/
    #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] != '') {
            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,'', 20 * sizeof(char));
                }
            } else {
                a[j++] = c;
            }
        }
        if(test(count(a)))  sum++;
        memset(a,'',20 * sizeof(char));
    
        printf("%d
    ",sum);
    }
    
    int main(void)
    {
        solve();
        return 0;
    }
    Answer:
    162

     

  • 相关阅读:
    C# 程序入口(Main)
    [转]GCD介绍
    【Selenium】WebDriver基础环境配置>Add Reference
    【原创】如何在一个没有测试经理的小公司做好测试?
    【Selenium】WebDriver基础环境配置>Nuget
    【原创】软件测试基础流程
    【共享】文件误删找回工具RCSETUP
    关于html base元素的使用
    关天C#数字类型的一个小发现
    js实现日期验证
  • 原文地址:https://www.cnblogs.com/acutus/p/3556833.html
Copyright © 2011-2022 走看看