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 + Gint 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;
}