A题:前一个数与后一个数相乘,将结果打印,简单题,记得i到n-1停止就行
#include<bits/stdc++.h>
using namespace std;
int main()
{ int n;
cin>>n;
vector <int> A;
for(int i=0;i<n;i++){
int op;
cin>>op;
A.push_back(op);}
for(int i=0;i<n-1;i++){
int k;
k=A[i]*A[i+1];
cout<<k<<" ";
}
cout<<endl;
return 0;
}
B题:字符串的查找,首先假如长度不够,就将字符串相加,到两倍是防止查找不全,然后设置双指针,对制定字符串长度进行搜查,记得j在for循环应该停止到i+n+m,不然查找不全。
#include <iostream>
#include <string>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
string s = "wbwbwwbwbwbw";
while (s.size() < 2*(n+m)) {
s+= s;
}
int flag1,flag2,f;
for(int i = 0; i <= s.size() - n - m; i++) {
flag1 = 0, flag2 = 0;
for(int j = i; j < i + n + m; j++) {
if (s[j] == 'w') {
flag1++;
} else if (s[j] == 'b') {
flag2++;
}
}
if (flag1 == n && flag2 == m) {
cout << "Yes" << endl;
f = 1;
return 0;
}
}
if (f == 0) {
cout << "No" << endl;
}
return 0;
}
C题:首先这道题数据范围很大,直接暴力肯定导致TLE(或许,我没试),N刚开始我开小了还导致了RE,并且要用long long储存数据。
以上是注意事项,这道题本身就是查找除了给定数组内的数的相加,首先指向第一个数,假如相同j++,不要在循环里将k设置为0(问就是改了好久),标记,不相同的再加。这道题谨防数据,代码基本都用long long 了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=200050;
ll q[N];
ll res;
int main(){
ll n,k;
scanf("%lld %lld",&n,&k);
for(int i=0;i<n;i++) scanf("%lld",&q[i]);
sort(q,q+n);
ll j=0;
for(ll i=1;i<=k;i++){
ll f=0;
while(q[j]==i){
j++,f++;
}
if(f==0) res+=i;
}
cout<<res<<endl;
return 0;
}
注意进行排序否则无法保证单调递增哦。
后续题解会陆续更新。