招行数据岗笔试题- 信用卡推荐客户列表

本文介绍了一种信用卡推荐积分系统的设计与实现,通过递归算法计算每个老客户的直接和间接推荐新户数量,并筛选出推荐新户数不少于指定值的老客户列表。

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

空间限制:32768K

现在信用卡开展营销活动,持有我行信用卡客户推荐新户办卡,开卡成功后可获得积分奖励。规定每个客户最多可推荐两个新户且一个新户只能被推荐一次。但允许链接效应,即若客户A推荐了新户B,新户B推荐新户C,则客户C同时属于A和B的推荐列表。简单起见,只考虑以一个老客户A作起点推荐的情况。编程计算推荐新户数不小于n的客户列表。

输入描述:

输入的第一行为以空格分隔的两个正整数,第一个表示原始推荐列表的个数m,第二个表示n的取值。
其后m行每行均为一个以空格分隔的原始推荐列表,第一列为推荐人,后面两列为被推荐人,若该推荐人只推荐了一个新户,则第三列以*替代。推荐人和被推荐人均以大写字母表示,不同字母代表不同的人。

输出描述:

在同一行输出符合条件的客户列表,无顺序要求,客户间以空格分隔。若客户列表为空,则输出None。详见样例。

输入例子1:

5 2
A B C
C F *
B D E
D G *
E H I

输出例子1:

A B E

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<set>
using namespace std;

typedef struct PointStruct
{
    string a;
    string b;
    int count = 0;
} val;

//采用递归方式找到每个用户的发展客户
//key为原始用户(推荐人)
//point为所有的推荐人列表构成的map
int findpath(string key, map<string, val>& point) 
{

    if (point.find(key) == point.end() || key == "*")
        return 0;
    int left = 0;
    int right = 0;
    if (point[key].a != "*")
        left = 1 + findpath(point[key].a, point);
    if (point[key].b != "*")
        right = 1 + findpath(point[key].b, point);

    return left + right;

}

int main()
{
    int n, m;
    cin >> n >> m;
    map<string, val> point;
    vector<string> vec;
    string key = "";
    while (n--)
    {
        val value;
        cin >> key >> value.a >> value.b;
        point.insert(pair<string, val>(key, value));
    }
    map<string, val>::iterator iter;

    for (iter = point.begin(); iter != point.end(); iter++)
    {

        int count = 0;
        count = findpath(iter->first, point);
        iter->second.count = count;

    }
    for (iter = point.begin(); iter != point.end(); iter++)
    {
        if (iter->second.count >= m)
            vec.push_back(iter->first);
    }
    int i = 0;
    for (i = 0; i < vec.size() - 1; i++)
        cout << vec[i] << " ";
    cout << vec[i];


    return 0;
}
### 关于招商银行测试外包位的笔试题目及相关准备资料 #### 一、关于招商银行测试外包的笔试范围 招商银行测试外包位通常会涉及以下几个方面的考察内容: 1. **计算机基础理论** 计算机网络、操作系统、数据库原理等内容是常见的考点。例如,在引用中提到的“并发”概念以及其可能引发的问题(如丢失更新、读脏数据等),这些都是软件测试人员需要掌握的基础知识点[^2]。 2. **编程能力** 编程语言的应用也是重要部分,尤其是C/C++这类底层语言的功能实现理解。比如`strcpy`函数的手写实现展示了对指针操作的理解程度。 3. **算法与数据结构** 题目可能会涉及到一些简单的算法设计和优化问题。例如引用中的小招喵填字母问题实际上是一个组合排列加约束条件下的最优解求法[^3]。 4. **软件测试专业知识** 包括但不限于功能测试、性能测试、接口测试等方面的知识点。考生需熟悉各种缺陷管理工具及其使用场景,并能够针对不同类型的Bug提出合理的解决方案。 5. **实际案例分析** 可能会有基于真实业务场景设置的问题让应聘者去思考如何进行有效率高质量地执行相应测试工作流程并记录下发现的所有潜在风险点。 #### 二、具体备考建议 为了更好地应对上述各类考核项目,可以从以下几个方面着手复习: - 加强对基本概念的记忆与理解; - 多练习典型例题来提高解决问题的速度与准确性; - 学习最新的行业动态和技术趋势以便及时调整自己的学习方向; - 积极参与模拟考试活动积累实战经验. 以下是几个具体的例子供参考: ```python def is_valid(s: str) -> bool: stack = [] mapping = {")": "(", "}": "{", "]": "["} for char in s: if char in mapping.values(): stack.append(char) elif char in mapping.keys(): top_element = stack.pop() if stack else '#' if mapping[char] != top_element: return False else: continue return not stack ``` 此段代码用于验证给定字符串是否为有效的括号序列[^无]. #### 三、总结 综上所述,参加招商银行测试外包位笔试前应全面了解该职位所需技能点,并通过针对性训练提升个人竞争力。希望每位求职者都能取得理想成绩!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值