重生之我在惠州发明C++-Day...
2025-07-25 15:33:09
发布于:广东
字符与字符串
字符
char
字符类型- -128 ~ 127
- 大写字母
- 小写字母
- 0-9数字
- 符号
- 功能符
- 换行符:
\n
- 末尾结束标志符:
\0
如何输入输出字符
char c;
cin >> c;
cout << c;
判断是否是大写字母
char c;
cin >> c;
if (c >= 'A' && c <= 'Z') {
// 大写字母
}
判断是否是小写字母
char c;
cin >> c;
if (c >= 'a' && c <= 'z') {
// 小写字母
}
判断是否是0-9
char c;
cin >> c;
if (c >= '0' && c <= '9') {
// 0-9的数字
}
大写转小写
char c;
cin >> c;
c = c - 'A' + 'a';
小写转大写
char c;
cin >> c;
c = c - 'a' + 'A';
C++字符串
string
字符串
如何获取字符串的字符个数
string s;
cin >> s;
// 获取字符串s的长度
int n = s.size();
如何for循环遍历字符串?
string s;
cin >> s;
for (int i = 0; i < s.size(); i ++) {
// 第 i 个字符是:s[i]
}
如何for循环逆序遍历字符串?
string s;
cin >> s;
for (int i = s.size() - 1; i >= 0; i --) {
// 逆序遍历字符串
}
如何判断回文串?
string s;
cin >> s;
string t;
// 逆序遍历字符串s
for (int i = s.size() - 1; i >= 0; i --) {
t += s[i];
}
if (s == t) {
// 就是回文串
}
进制转换
十进制转 r 进制
十进制转 r 进制的口诀:除r取余,逆序输出
例如,23 转换成二进制:
- 23 / 2 = 11 ······ 1
- 11 / 2 = 5 ······ 1
- 5 / 2 = 2 ······ 1
- 2 / 2 = 1 ······ 0
- 1 / 2 = 0 ······ 1
余数逆序输出:10111
十进制转r进制代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int a[1001];
int cur;
int main()
{
cin >> n;
while (n) {
a[cur] = n % 8;
cur ++;
n /= 8;
}
int cnt = 0;
for (int i = cur - 1; i >= 0; i --) {
cout << a[i];
if (a[i] == 7) {
cnt ++;
}
}
cout << ' ' << cnt;
return 0;
}
r 进制转换成十进制
口诀:每一位乘上他对应的位权,最后加在一起
比如二进制的 10111
1 0 1 1 1
2^4 2^3 2^2 2^1 2^0
2^4 + 2^2 + 2^1 + 2^0 = 23
原码反码补码
- 正数:正数的原码、反码、补码都一样,都是二进制表示
- 负数:
- 负数的原码,除了符号位与正数的不一样之外,其他都一样
- 反码等于原码取反,但符号位不变
- 补码等于反码+1
位运算
- 按位与:先转换成二进制,再一位一位的比较,都是 1 才是 1,有一个 0 就是 0
- 按位或:先转换成二进制,每一位进行比较,有 1 就是 1,都是 0 才是 0
- 按位异或:先转换成二进制,每一位进行比较,不同就是 1,相同是 0
- 按位取反:每一位都取反,0变成1,1变成0
- 左移 1 位,相当于乘一个 2
- 左移 x 位,相当于乘
- 右移 1 位,相当于除一个 2
- 右移 x 位,相当于除
初赛知识
/**
*
* 十进制转 2 进制的口诀:除2取余,逆序排列
* 十进制转 k 进制的口诀:除k取余,逆序排列
*
* 如果有小数的话,如何转成 2 进制
* 先分开:整数、小数两个部分
* 整数:除2取余,逆序排列
* 小数:乘2取整,顺序排列
*
* 如果有小数的话,如何转成 k 进制
* 先分开:整数、小数两个部分
* 整数:除k取余,逆序排列
* 小数:乘k取整,顺序排列
*
* 2进制转10进制:每一位乘上对应的位权,然后累加
*
* 中缀表达式
* 前缀表达式
* 后缀表达式
*
* 如何将中缀转换成前缀、后缀
* 并且前缀、后缀表达式是如何算出答案
*
* 中缀转前缀的步骤:
* 1. 先弄出运算符的执行顺序
* 2. 根据这个顺序,加括号
* 3. 把运算符提取到对应括号的前面
* 4. 删除括号
*
* 栈:是一个底部密封的管道
* 先进去的最后出来
*
* 前缀表达式的计算过程:
* 1. 从右往左扫描
* 2. 遇到数字就丢入栈中
* 3. 遇到运算符,就从栈里面拿两个数出来运算
* 4. 算出来后,再丢进去
*
*
*
* 中缀转后缀的步骤:
* 1. 先弄出运算符的执行顺序
* 2. 根据这个顺序,加括号
* 3. 把运算符提取到对应括号的后面
* 4. 删除括号
*
* 栈:是一个底部密封的管道
* 先进去的最后出来
*
* 后缀表达式的计算过程:
* 1. 从左往右扫描
* 2. 遇到数字就丢入栈中
* 3. 遇到运算符,就从栈里面拿两个数出来运算,
* 谁先拿出来,谁放右边运算
* 4. 算出来后,再丢进去
*
* 在机器码中,二进制的最高位称为符号位
* - 0 表示正数
* - 1 表示负数
*
* 正数的原码、反码、补码:
* - 正数的原码反码补码都一样,都是它的二进制
*
* 10 -> 二进制是多少?1010
* -> 原码:00001010
* -> 反码:00001010
* -> 补码:00001010
* -> 都一样,都是他的二进制表示
*
* 负数的原码、反码、补码:
* - 负数的原码:就是它的二进制,只不过最高位是 1
* - 负数的反码:就是原码的最高位不变,其他都取反
* - 负数的补码:就是反码 + 1
*
* -10 -> 二进制表示:1010
* -> 原码:10001010
* -> 反码:11110101
* -> 补码:11110110
*
* 二进制运算,在计算机里面针对的是补码:
*
* 二进制与运算 &:一位一位的比较,都是 1 才是 1
* 二进制或运算 |:一位一位的比较,有 1 就是 1
* 二进制取反运算 ~:一位一位的取反,0变1,1变0
* 二进制异或运算 ^:一位一位的比较,不同就是 1,相同就是 0
* 二进制左移运算 <<:左移 x 位,相当于乘 2^x
* 二进制右移运算 >>:右移 x 位,相当于除以 2^x
*
* 从 n 个人里面,选择 m 个人出来排队,总共有:
* - A(n, m) 种方法
* - A(n, m) = n! / (n-m)!
*
* 0! = 1
*
* 从 n 个人里面,抽出 m 个人出来,有多少种方法:
* - C(n, m) 种方法
* - C(n, m) = n! / (m!(n-m)!)
*/
全部评论 74
标题党是吧,我是真被原神抽奖点名器整过
1周前 来自 江苏
10是的
1周前 来自 上海
0me too
1周前 来自 广东
1不是,是真的。起因是我们班老师说:“如果这道题同学做对了,那他就做15个俯卧撑“然后就有同学举手了。随后老师当着大家的面把原神抽奖点名器的名单调成了只有老师名和同学明,单抽......老师做了整道题。剧终。。。。。。
1周前 来自 广东
0
2025-07-16 来自 广东
4崩铁
1周前 来自 广东
0不是
1周前 来自 广东
0爱莉希雅
1周前 来自 广东
0
ok,啊,咱也是看上好的东西了
2025-07-16 来自 广东
4来财
2025-07-17 来自 广东
1逼佬仔
2025-07-17 来自 广东
0挂玉牌
2025-07-17 来自 广东
0
菜,就多练
老老实实地比赛做题
禁止比赛期间随意走动
禁止比赛期间大喊大叫
首杀不用讲解当前题目
一个首杀都没有必定讲题
最后两点会根据具体情况动态调整
@林老师1周前 来自 广东
21周前 来自 广东
0
我想把这个帖子顶上去
2025-07-16 来自 广东
22025-07-16 来自 广东
2还有我
6小时前 来自 广东
0
这不是我老师吗
6天前 来自 广东
1没想到老师居然看番
1周前 来自 广东
1AUV您吉祥,祝您天天不出金,笑死我了原神抽卡器一次没抽中我
1周前 来自 广东
1你在集训营吗
1周前 来自 广东
0在
1周前 来自 广东
0你今天户外时是不是沙包被菜老师拿走了
5天前 来自 广东
0
打卡
1周前 来自 广东
11周前 来自 广东
1群里发藕饼的是看魔怔了吗???
2025-07-17 来自 广东
1那位好像删了
1周前 来自 广东
1
打卡
2025-07-17 来自 广东
1这不是藕饼专区啊,大哥们
2025-07-17 来自 广东
1[:ACGO_无
2025-07-16 来自 广东
1打卡
2025-07-16 来自 广东
1刷屏
6小时前 来自 广东
0刷屏
6小时前 来自 广东
0刷屏
6小时前 来自 广东
0#include <iostream> #include <queue> using namespace std; const int N = 55; struct node{ int x; int y; }; int a[105][105]; bool vis[105][105]; int dx[]={-1,1,0,0};// 上下左右 int dy[]={0,0,-1,1}; int main(){ freopen("spring.in","r",stdin); freopen("spring.out","w",stdout); queue<node>q; int n,m,xx,yy;cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; cin>>xx>>yy; vis[xx][yy]=true,q.push({xx,yy}); while(!q.empty()){ node now=q.front(); cout<<a[now.x][now.y]<<" "; q.pop(); for(int i=0;i<4;i++){ int nx=now.x+dx[i],ny=now.y+dy[i]; if(nx>=1&&nx<=n&&ny>=1&&ny<=m&& !vis[nx][ny]){ vis[nx][ny]=true,q.push({nx,ny}); } } } fclose(stdin); fclose(stdout); return 0; }
昨天 来自 广东
0
有帮助,赞一个