Topic 1:字符串替换
这竟然是个中等难度,很难想象;简单题简单做,把&& A[i + 1] == 's'条件删掉还能快1ms,能进排行榜,但是不健壮,显然这个题目的测试用例不是很全,我要整个%x %i %o之类的你不炸了嘛
class StringFormat
{
public:
string formatString(string A, int n, vector<char> arg, int m)
{
string res;
int index = 0;// 标识arg里的字母用到几号了
for(int i = 0; i < n; ++i)
{
if(A[i] == '%' && A[i + 1] == 's')
{
res.push_back(arg[index++]);
++i;
}
else res.push_back(A[i]);
}
while(index < m) res.push_back(arg[index++]);
return res;
}
};
Topic 2:神奇数

#include <iostream>
#include <vector>
#include <set>
#include <cmath>
using namespace std;
// 判断是否是质数
bool is_prime(int n) {
if (n < 2) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
// 判断一个数字是否是"神奇数"
bool is_magic_number(int num, const set<int>& prime_set) {
string num_str = to_string(num);
int length = num_str.length();
// 遍历所有可能的数字组合
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
if (i != j) {
int two_digit_number = (num_str[i] - '0') * 10 + (num_str[j] - '0');
if (prime_set.find(two_digit_number) != prime_set.end()) {
return true;
}
}
}
}
return false;
}
// 主函数
int main() {
int a, b;
cin >> a >> b;
// 先计算 10 到 99 之间的所有质数
set<int> prime_set;
for (int i = 10; i < 100; i++) {
if (is_prime(i)) {
prime_set.insert(i);
}
}
int count = 0;
for (int i = a; i <= b; i++) {
if (is_magic_number(i, prime_set)) {
count++;
}
}
cout << count << endl;
return 0;
}
Topic 3:DNA序列(固定规模的滑动窗口)
#include <bits/stdc++.h>
using namespace std;
string findGC(const string& dna, int n)
{
double max_ratio = -1.0;
string result;
int len = dna.length();
for (int i = 0; i <= len - n; ++i)
{
string sub = dna.substr(i, n);
int gc = 0;
for (char c : sub)
{
if (c == 'G' || c == 'C') gc++;
}
double ratio = (double)gc / n;
if (ratio > max_ratio)
{
max_ratio = ratio;
result = sub;
}
}
return result;
}
int main() {
string dna;
int n;
cin >> dna >> n;
cout << findGC(dna, n) << endl;
return 0;
}
344

被折叠的 条评论
为什么被折叠?



