860 字
4 分钟
L1-011~L1-015的笔记
Samera2022
/
GPLTNotes
Waiting for api.github.com...
00K
0K
0K
Waiting...

P.S. 这份笔记同步发布在我的博客上,建议在博客中查看以享受完整的MD Extended Features. 你可以点此快速跳转到相应页面,我的博客地址为https://samera2022.github.io

L1-011#

代码部分#

L1-011.cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(string& A, string& B);
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string A;
getline(cin,A);
string B;
getline(cin,B);
solve(A,B);
return 0;
}
void solve(string& A, string& B) {
const int len = static_cast<int>(B.length());
for (int i = 0; i <= len; i++)
A.erase(remove(A.begin(),A.end(),B[i-1]), A.end());
cout<<A;
}

笔记部分#

  • 在Java中,我们可以直接通过replace(CharSequence target, "")来快速地删除字符串中全体的某种字符,然而在C++中实现这种操作略微复杂一些。在此我们需要先介绍两个方法:string.erase()remove()
  • 关于string.erase(iterator first, iterator last):该方法会移除从firstlast的所有字符。
  • 关于remove(iterator first, iterator last, char target):该方法会将从firstlast的所有非target_char字符向前移动并返回正确新结尾的迭代器,从整体上来看就是把所有的target_char后移了。
  • 尽管C++中没有原生的直接移除字符串中某字符的方法,不过有替换字符串中全体某字符为另外一个字符的方法:对于string s而言,可用replace(s.begin(), s.end(), (char) old_char, (char) new_char)。由于new_char必须是一个char类型,导致不能写''进去……

L1-012#

代码部分#

L1-012.cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin>>n;
cout<<"2^"<<n<<" = "<<pow(2,n);
return 0;
}

笔记部分#

  • <cmath>包含在<bits/stdc++.h>中,因此在using namespace std时可以直接使用pow(2, n)

L1-013#

代码部分#

L1-013.cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(int N);
int factorial(int n);
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N;
cin>>N;
solve(N);
return 0;
}
void solve(const int N) {
int res = 0;
for (int i = 1; i <= N; i++) res += factorial(i);
cout<<res;
}
int factorial(const int n) {
if (n==0) return 1;
int res = 1;
for (int i = 1; i <= n; i++) res *= i;
return res;
}

笔记部分#

  • 没有什么好记的。

L1-014#

代码部分#

L1-014.cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cout<<"This is a simple problem.";
return 0;
}

笔记部分#

  • 没有什么好记的。

L1-015#

代码部分#

L1-015.cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(int N, const string& delimiter);
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N;
cin>>N;
string delimiter;
cin>>delimiter;
solve(N,delimiter);
return 0;
}
void solve(const int N, const string& delimiter) {
const int row = static_cast<int>(round(static_cast<double>(N)/2));
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= N; j++) cout<<delimiter;
cout<<"\n";
}
}

笔记部分#

  • C++中四舍五入使用的是round(double)方法。特别地,该方法返回的仍然为double类型,需要进一步手动转换。
  • 由于C++的浮点转整数为去尾转换,你也可以借助这个性质来快速转换:考虑double a;,对于正数你可以使用static_cast<int>(a+0.5),对于负数你可以使用static_cast<int>(a+(-0.5)),对于0而言,为了保持统一性,我们需要使用static_cast<int>(a+0.0f)。因此综合地,你可以使用static_cast<int>( a + ( a == 0 ? 0.0f : ( 0.5 + 1e-9 ) * ( a > 0 ? 1 : -1)))来进行快速四舍五入。类似地,你可以处理五舍六入等情况。关于偏移截断的内容,详见这篇文章这篇文章
  • 如果你希望返回其他整数类型,可以采用lround(doble)(返回long)和llround(double)(返回long long)。
  • 特别地,C++并不原生支持四舍五入到N位小数,如果你需要这样的操作,需要先乘以eN倍,取整后再除以eN还原回来。
L1-011~L1-015的笔记
https://samera2022.github.io/posts/Notes/GPLT/l1-011l1-015/
作者
Samera2022
发布于
2026-01-22
许可协议
CC BY-NC-SA 4.0