1. 整理
题目
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v(n, 0);
for(int i = 0; i < n; i++) cin >> v[i];
unsigned long long result = 0;
sort(v.begin(), v.end());
for(unsigned int i = 1; i < v.size(); i++) {
result += v[i] - v[i-1];
}
cout << result << endl;
}
本题比较简单,直接排序再计算差值即可。
2. 字符串前缀
题目
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
string s, t;
cin >> n;
for(int i = 0; i < n; i++) {
cin >> s >> t;
int j = 0, k = 0;
int cnt = 0;
for(int j = 0; j < min(s.size(), t.size()); j++) {
if(s[j] != t[j]) cnt++;
}
if(s.size() > t.size()) cnt += s.size() - t.size();
cout << cnt << endl;
}
}
因为字符串的前缀必然是有序且一一对应的,直接挨个比较不同的字符个数,最后再删掉多余的字符即可。
3. 塔子哥的数字
题目
代码
#include <bits/stdc++.h>
using namespace std;
void solve() {
string a;
int b;
cin >> a >> b;
for (int i = 0; i < a.size(); ++i) {
// 从小到大枚举,一旦找到一个小于 b 的数字,就将 b 插入在其之前
if (a[i] < (b + '0')) {
cout << a.substr(0, i) + to_string(b) + a.substr(i) << "\n";
return ;
}
}
// 如果 b 小于 a 中所有数字,就将 b 插入到所有数之后即可。
cout << a + to_string(b) << "\n";
}
int main()
{
int T;
cin >> T;
while (T--) solve();
return 0;
}
4. 制作骰子
题目
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
for(int i = 0; i < t; i++) {
int n;
cin >> n;
vector<int> vec(n, 0);
for(int i = 0; i < n; i++) cin >> vec[i];
sort(vec.begin(), vec.end());
bool ok = true;
int ans = (vec[0] + vec[n-1]);
for(int i = 0, j = n-1; i < j; i++, j--) {
if(vec[i] + vec[j] != ans) {
ok = false;
break;
}
}
if(ok) cout << "Yes" << endl;
else cout << "No" << endl;
}
}
对于一组有序的数据来说,想要它两两的和相等,必然是首尾挨个取一个元素相加,接下来只要挨个判断是否相等即可。
5. 回文串
题目
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int cnt = 0;
for(int i = 0; i < s.size()/2; i++) {
if(s[i] != s[s.size() - 1 - i]) cnt++;
}
// 原本就是回文串
if(cnt == 0) {
for(int i = 0; i < s.size(); i++) {
if(s[i] != 'a') {
s[i] = 'a';
s[s.size() - 1 - i] = 'a';
break;
}
}
}
// 有一个字符不相等
else if(cnt == 1) {
for(int i = 0; i < s.size(); i++) {
if(s[i] != s[s.size() - 1 -i]) {
// 如果不相等的另外一个是'a'且字符串是奇数,则修改中间的
if(s[i] == 'a' || s[s.size() - 1 -i] == 'a') {
if(s.size()/2) s[s.size()/2] = 'a';
}
s[i] = 'a';
s[s.size()-1-i] = 'a';
}
}
}
else {
// 取较小的字符赋值即可
for(int i = 0; i < s.size(); i++) {
if(s[i] != s[s.size()-1-i]) {
s[i] = min(s[i], s[s.size()-1-i]);
s[s.size()-1-i] = min(s[i], s[s.size()-1-i]);
}
}
}
cout << s << endl;
}