zoukankan      html  css  js  c++  java
  • 【USACO】namenum

    //开始傻×了 受题目形容的误导 一心想生成所有可能的 字符串组合 之后查找非常慢 
    //听了同学的 将5000个dict里的字符串 转换成char型数组(不能直接用int 会越界)直接用输入的数据对着转换后的数据查找就可以了 
    
    //现在的程序还是太复杂了 没有必要提前把dict中的字符串都存起来 取一个判断一个就好了
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    typedef struct
    {
        char num[13];
        char name[13];
    }MYDICT;
    vector<MYDICT> dict; //vector<>中 最好不要用指针 因为vector对指针是不会复制的 如果之后用指针做了别的操作 vector里的值就都变了
    
    int transName2Num(char * name, char * num)
    {
        int len = strlen(name);
        int i;
        int n;
        for(i = 0, n = 0; i < len; i++)
        {
            switch(name[i])
            {
            case 'A':
            case 'B':
            case 'C': num[i] = '2';break;
            case 'D':
            case 'E':
            case 'F': num[i] = '3';break;
            case 'G':
            case 'H':
            case 'I': num[i] = '4';break;
            case 'J':
            case 'K':
            case 'L': num[i] = '5';break;
            case 'M':
            case 'N':
            case 'O': num[i] = '6';break;
            case 'P':
            case 'R':
            case 'S': num[i] = '7';break;
            case 'T':
            case 'U':
            case 'V': num[i] = '8';break;
            case 'W':
            case 'X':
            case 'Y': num[i] = '9';break;
            default: break;
            }
        }
        num[len] = '';
        return 0;
    }
    
    int main()
    {
        MYDICT tmp;
        int flag = 0;
        FILE * intxt, *out;
        char name[13];
        char num[13];
        char name3[13];
        fstream in;
        in.open("namenum.in", ios::in);
        intxt = fopen("dict.txt", "r");
        out = fopen("namenum.out", "w");
    
        char innum[13];
        in >> innum;
        do
        {
            fscanf(intxt,"%s", name);
            transName2Num(name, num);
            strcpy(tmp.name,name);
            strcpy(tmp.num,num);
            dict.push_back(tmp);
        }while(strcmp(name, "ZYTA") != 0);
        
        vector<MYDICT>::const_iterator it2;
        
        for(it2 = dict.begin(); it2 < dict.end(); it2++)
        {
            strcpy(name3,(*it2).num);
            if(strcmp(name3,innum) == 0)
            {
                fprintf(out, "%s
    ", (*it2).name);
                flag = 1;
            }
        }
    
        if(flag == 0)
        {
            fprintf(out, "NONE
    ");
        }
    
        
        return 0;
    }

    自己的代码还是太复杂了 下面是答案的 超精简

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
        FILE *in = fopen ("namenum.in", "r");
        FILE *in2 = fopen ("dict.txt", "r");
        FILE *out = fopen ("namenum.out","w");
        int nsolutions = 0;
        int numlen;
        char word[80], num[80], *p, *q, map[256];
        int i, j;
        map['A'] = map['B'] = map['C'] = '2';
        map['D'] = map['E'] = map['F'] = '3';
        map['G'] = map['H'] = map['I'] = '4';
        map['J'] = map['K'] = map['L'] = '5';
        map['M'] = map['N'] = map['O'] = '6';
        map['P'] = map['R'] = map['S'] = '7';
        map['T'] = map['U'] = map['V'] = '8';
        map['W'] = map['X'] = map['Y'] = '9';
        fscanf (in, "%s",num);
        numlen = strlen(num);
        while (fscanf (in2, "%s", word) != EOF) {
            for (p=word, q=num; *p && *q; p++, q++) {
                if (map[*p] != *q)
                    break;
            }
            if (*p == '' && *q == '') {
                fprintf (out, "%s
    ", word);
                nsolutions++;
            }
        }
        if (nsolutions == 0) fprintf(out,"NONE
    ");
        return 0;
    }
  • 相关阅读:
    利用C# + GDI plus模拟杂乱无章的现实场景
    Windows Identity Foundation已包含在.NET 4.5中
    实体框架 6.0:异步、IQueryable操作符和特性改进
    Knotter 0.7.0 发布,交错图案设计工具
    实体框架 5.0:空间数据类型、性能增强、数据库提升
    JFormDesigner 5.2 Beta 发布,Swing设计工具
    获取泛型参数的泛型类型
    Android MapView 申请apiKey
    Android Animation学习笔记
    eclipse 无法启动 JVM terminated. Exit code=1
  • 原文地址:https://www.cnblogs.com/dplearning/p/3707652.html
Copyright © 2011-2022 走看看