1152 Google Recruitment (20 分)(c++实现 已AC)

思路

题目的大意很简单, 在L长度的数字字符串中找到第一个k长度的素数. 如果找不到哦啊返回404, 找到了返回这个k长度的字符串.
一个简单暴力的思路就是遍历L长度, 检查从这个字符起往后k长度的字符串表示的数字是否是素数.

测试点:

// 样例测试点
20 5
23654987725541023819

// 样例测试点
10 3
2468024680

// 当L 小于k时, 返回`404`
5 6
00523 // 404

// k长度的字符串包含前导0时, 输出的时候要包含前导0, 测试点3
5 2
00021 // 02

**其他问题 ** k < 10 但是还是可能超过int的表示范围, 所以采用long int更保险, 在pta判题系统里, long int和int都是32bit, 只有long long int是64bit, 故采用long long

代码

#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#define ll long long
using namespace std;
char seq[1005];
int n, k;
bool isprime(ll n) {
	if (n < 2) return false;
	if (n == 2) return true;
	for (ll i = 2;i <= (int)sqrt((double)n); i++) {
		if (n % i == 0) return false;
	}
	return true;
}
ll stoint(char *s, int k) {
	char* p = s;
	ll sum = 0;
	while (k--) {
		sum = sum * 10 +(*p - '0');
		p++;
	}
	return sum;
}
int main() {
	scanf("%d%d", &n, &k);
	scanf("%s", seq);
	ll temp;
	bool flag = false;
	for (int i = 0; i <= n-k && !flag; i++){
		temp = stoint(seq + i, k);
		if (isprime(temp)) flag = true;
	}
	if (flag) printf("%.*d", k, temp);
	else printf("404");
	return 0;
}

总结

审题还是不够仔细, 如果能够看到这句话to find the 4-digit prime in 200236, 0023 is a solution的话, 应该就能想到前导零的问题, 2分就这样丢了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值