PTA—7-5 谷歌的招聘

实际上这题是不难的,甚至说有点简单,连我这样的小菜比都可以顺利的AC。

废话不多说来看题目。

2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。

自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921... 其中粗体标出的 10 位数就是答案。

本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。

输入格式:

输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。

输出格式:

在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。

输入样例 1:

20 5
23654987725541023819
 

输出样例 1:

49877

以我的大脑,能想到的正常思路就是,按照每次 k 位的顺序,先把这些数读出来,就自乘累加法(我自己取的名字,大家肯定能理解)然后判断是不是奇数,只要是奇数就输出,然后return 。但是输出就有一个问题了,可能很多同学没用过这个printf("%0*d",k,ans[k_])这个 ' * '就是相当于一个占位符吧,把 k 填进去。其实知道这个了,就没什么问题了。

这题就不分析了,直上挂代码~

#include <stdio.h>
int str[1010];//读输入
int ans[1010];//存k位的数字
int is(int a)//是奇数就返回1
{
	
	if (a == 1||a==0)return 0;
	for (int i = 2; i * i <= a; i++)
	{
		if (a % i == 0)return 0;
	}
	return 1;
}
int main()
{
	int k, L;
	scanf("%d%d", &L, &k);
	for (int i = 0; i < L; i++)
	{
		scanf("%1d", &str[i]);
	}
	int k_ = 0;//k_来当ans的下标,表示第k_个存起来的数字
	for (int i = 0; i <= L - k; i++)
	{
		for (int j = i ; j < i + k; j++)
		{
			ans[k_] =ans[k_]*10 +str[j];
		}

		if (is(ans[k_]))
		{
			printf("%0*d\n", k, ans[k_]);
			return 0;
		}

		k_++;

	}
	printf("404\n");
	return 0;



}

### PTA 题目 7-57-6 的分析 #### 关于题目背景 PTA 平台上的编程练习通常涉及算法设计、数据结构应用以及逻辑推理能力。对于题目编为 **7-5** 和 **7-6** 的两道题,其核心主题围绕着模拟现实场景中的行为模式——具体来说,“撒狗粮”的情境被抽象成了一种程序化的表达方式。 以下是针对这两道题目的可能实现方法及其解析: --- #### 题目 7-5 解析与实现 这道题目主要考察的是字符串处理能力和条件判断技巧。假设输入是一系列情侣之间的互动记录,目标是从这些记录中筛选出特定的行为并统计频率。 ##### 实现思路 通过读取每条记录,提取关键字来匹配预定义的“撒狗粮”标准,并计算符合条件的数量。 ```python def count_dog_food(records, keywords): """ 统计给定记录列表中有多少次满足关键词集合的标准 :param records: list[str], 输入的情侣互动记录 :param keywords: set[str], 定义为“撒狗粮”的关键词集合 :return: int, 符合条件的次数 """ count = 0 for record in records: words = record.split() # 将单条记录拆分为单词列表 if any(word in keywords for word in words): # 如果任意单词属于关键词集,则计入一次 count += 1 return count # 示例调用 records_example = [ "Alice gave Bob a heart-shaped chocolate", "Bob and Alice went to the park together", "Charlie bought himself a new book" ] keywords_set = {"heart", "together"} # 假设这两个词代表撒狗粮行为 result = count_dog_food(records_example, keywords_set) print(f"Total dog food actions: {result}") # 输出结果应为2 ``` 上述代码片段展示了如何利用简单的字符串操作完成任务[^1]。 --- #### 题目 7-6 解析与实现 此部分进一步扩展了前一题的功能需求,在原有基础上增加了时间维度考量或者更复杂的交互关系建模。例如,不仅关注某一天内的活动频次,还希望了解长期趋势变化;又或者是引入社交网络概念,评估不同个体之间的影响程度差异等。 ##### 数据结构选择建议 为了高效存储和查询大量用户间的关系链路信息,推荐采用图(Graph)形式表示整个系统状态。其中节点(Node)对应参与者(即人物角色)(Edge)则用来描述他们彼此间的联系强度或事件发生概率。 下面给出基于邻接表(adjacency list)构建图模型的一个例子: ```python from collections import defaultdict class SocialGraph: def __init__(self): self.graph = defaultdict(list) def add_edge(self, u, v): """向无向图添加一条连接""" self.graph[u].append(v) self.graph[v].append(u) def bfs_traversal(self, start_node): """执行广度优先遍历(BFS), 返回访问顺序""" visited = set() queue = [start_node] traversal_order = [] while queue: current = queue.pop(0) if current not in visited: visited.add(current) traversal_order.append(current) neighbors = sorted([node for node in self.graph[current] if node not in visited]) queue.extend(neighbors) return traversal_order # 创建实例对象 sg = SocialGraph() # 添加几组样本关联 pairs_of_friends = [("Alice", "Bob"), ("Bob", "Eve"), ("Alice", "Eve")] for pair in pairs_of_friends: sg.add_edge(*pair) # 展示从“Alice”出发可达的所有朋友名单 path_result = sg.bfs_traversal("Alice") print("Friends reachable via BFS:", path_result) ``` 这里采用了Breadth First Search (BFS)[^2] 来探索由初始顶点所能触及到的所有其他成员路径长度最短的情况。 --- ### 总结说明 以上分别就两个层次的任务提出了相应的解决方案框架。前者侧重基础功能达成,后者尝试挖掘潜在深层次规律特性。当然实际编码过程中还需要注意界情况处理以及其他细节优化方面的工作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值