跳至正文

USACO 1.2.3 Name That Number

  • OI路程

  这题我用的方法就是将dict.txt中的每一个字符串读出来,并判断是否满足输入的那个数字,如果满足输出就是。
  我还有另外一个算法,就是首先根据输入的数字来确定范围,然后逐步缩小,最后确定到个数,但是很快就发现这是(我)无法实现的高难度算法。
  再一个,我上面的那个算法要注意的是数的长度,最长是12位的数字!int存不进,必须要用long long!
  代码如下:

/
LANG: C
ID: yylogoo1
PROG: namenum
/
#include <stdio.h>
#include <assert.h>
FILE fp;
char str[13];
char map[26] = {222333444555666,
        70778889990};

long long change(char str)
{
        long long t = 0;
        while(str != ‘\0’){
                t
10;
                t += map[*str – ‘A’];
                str++;
        }
        return t;
}

int main(void)
{
        int i;
        long long n;
        unsigned ans = 0;
        freopen("namenum.in""r"stdin);
        freopen("namenum.out""w"stdout);
        fp = fopen("dict.txt""r");
        assert(fp != NULL);
        scanf("%lld", &n);
        while(fscanf(fp, "%s", str) == 1){
                if(change(str) == n){
                        printf("%s\n", str);
                        ans++;
                }
        }
        if(ans == 0){
                printf("NONE\n");
        }
        return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注