USACO-Section1.2 namenum[字符处理]

2017-5-25
题目大意:

给定4617个可被接受的牛的名字;给遗传数字,按照规则,如下:
2: A,B,C
4: G,H,I
5: J,K,L
7: P,R,S
8: T,U,V
9: W,X,Y
将数字翻译成一个可以被接受的名字并输出。

样例输入:

4734

样例输出:

GREG

题解:

将给定的可接受的牛的名字转换成唯一的数字,与给的数字做比较,配上一定的剪枝,可以减少一定的时间。
if(k1!=k2){
continue;
}
k1 代表数字长度 k2 代表字符串长度
(我将数字当成字符进行比较)
如:a[i]-‘A’==b[i]

代码:

C++
/*
ID:mujinui1
PROG:namenum
LANG:C++
*/
#include<fstream>
using namespace std;


const char code[26] = {'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','0','7','7','8','8','8','9','9','9'};
char a[13], b[13], c[13];



int main(){
    ifstream fin1("dict.txt");
    ifstream fin("namenum.in");
    ofstream fout("namenum.out");
    int  flag1,flag2=1;
    char a[100];
    char num[15];
    fin>>num;
    int k1,k2;
    for(k1=0;num[k1]!='\0';k1++);
    while(fin1>>a){
        flag1=1;
    for(k2=0;a[k2]!='\0';k2++);
      if(k1!=k2){
            continue;
        }
            for(int i=0;i<k1;i++){
                if(code[a[i]-'A']!=num[i]){
                    flag1=0;
                }
            }

        if(flag1==1){
            fout<<a<<endl;
            flag2=0;
        }
    }


    if(flag2==1){
        fout<<"NONE"<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值