NO.1
代码实现:
class StringFormat {
public:
string formatString(string A, int n, vector<char> arg, int m) {
string ret;
int j=0;
for(int i=0;i<n;i++)
{
if(A[i]=='%')
{
if(i+1<n&&A[i+1]=='s')
{
ret+=arg[j++];
i++;
}
else {
ret+=A[i];
}
}
else {
ret+=A[i];
}
}
while(j<m)
{
ret+=arg[j++];
}
return ret;
}
};
NO.2
思路:枚举,利用vector容器将数据的每一位都存入,随机抽取作为十位和个位,并且保证十位不为0,抽取的十位和个位的数据不能相等,最后再判断得到的数值是不是质数。
代码实现:
#include <iostream>
#include<cmath>
#include<vector>
using namespace std;
int a, b;
bool ischeck(int x)
{
if (x < 2) return false;
for (int i = 2; i <= sqrt(x); i++)
{
if (x % i == 0)
{
return false; break;
}
}
return true;
}
int check(int n)
{
vector<int> v;
while (n)
{
v.push_back(n % 10);
n /= 10;
}
for (int i = 0; i < v.size(); i++)
{
for (int j = 0; j < v.size(); j++)
{
if (i != j && v[i] != 0)
{
if (ischeck(v[i] * 10 + v[j]))
{
return 1;
}
}
}
}
return 0;
}
int main()
{
cin >> a >> b;
int ret = 0;
for (int i = max(a, 10); i <= b; i++)
{
ret += check(i);
}
cout << ret << endl;
return 0;
}
NO.3
思路:滑动窗口,定义left和right两个指针,right向右遍历,如果有C或者G,count++,当区间内的数大于x时,left出窗口,如果left指针遍历的字符有C或者G就count–,当区间内的数等于x时,那么就更新长度,让begin为目标字符串的第一个位置。
代码实现:
#include <iostream>
#include<string>
using namespace std;
string s;
int x;
int main()
{
cin>>s>>x;
int begin = -1; // 标记结果的起始位置
int maxcount = 0; // 存储之前的窗⼝⾥⾯ C + G 的个数
int count = 0; // 统计窗⼝内 C + G
int left = 0, right = 0, n = s.size();
while(right<n)
{
if(s[right]=='C'||s[right]=='G') count++;
while(right-left+1>x)
{
if(s[left]=='C'||s[left]=='G') count--;
left++;
}
if(right-left+1==x)
{
if(count>maxcount)
{
begin=left;
maxcount=count;
}
}
right++;
}
cout<<s.substr(begin,x)<<endl;
return 0;
}