HDU 4287 Intelligent IME

本文介绍了一个使用C++实现的程序,该程序能够根据给定的数字键盘映射找到可以组成的特定单词数量。通过预定义字母到数字的映射,并输入一系列数字和目标单词,程序能够计算出这些数字能组成的目标单词的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:每个数有对应的字母
2 : a, b, c 
3 : d, e, f   
4 : g, h, i  
5 : j, k, l   
6 : m, n, o  
7 : p, q, r, s 
8 : t, u, v   
9 : w, x, y, z

给出一数字和单词 问该数字能组成下列单词中的多少个?

#include <stdio.h>
using namespace std;

int a[1000000];

int le[126];

int main()
{
    int T, n, m, qt[5005];
    char s[10];

    le['a'] = le['b'] = le['c'] = 2;
    le['d'] = le['e'] = le['f'] = 3;
    le['i'] = le['h'] = le['g'] = 4;
    le['j'] = le['k'] = le['l'] = 5;
    le['o'] = le['n'] = le['m'] = 6;
    le['p'] = le['q'] = le['r'] = le['s'] =  7;
    le['v'] = le['u'] = le['t'] = 8;
    le['w'] = le['x'] = le['y'] = le['z'] = 9;

    scanf("%d", &T);
    while (T--)
    {
        scanf("%d %d", &n, &m);
        for (int i = 0; i < n; i++)
            scanf("%d", &qt[i]);
        memset(a, 0, sizeof(a));
        for (int i = 0; i < m; i++)
        {
            scanf("%s", s);
            int L = strlen(s), ans = 0;
            for (int i = 0; i < L; i++)
                ans = 10*ans + le[s[i]];
            a[ans]++;
        }
        for (int i = 0; i < n; i++)
            printf("%d\n", a[qt[i]]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值