【以练促学:C++基础语法】语法基础
(持续刷题,持续更新...)
一. 数学概念
1.1. 奇偶性
1. 判断奇偶
if ( num % 2 == 0) //偶数 if ( num % 2 != 0) //奇数
1.2 完全数
1. 完全数
- 一个整数,除了本身以外的其他所有约数的和如果等于该数,那么我们就称这个整数为完全数
- 例如,6 就是一个完全数,因为它的除了本身以外的其他约数的和为 1+2+3=6
2. 完全数的优化(通过约数成对出现,减少遍历)
//优化前 int count=0; for(int j=1; j<num; j++) //此处是一个个约数遍历 { if(num%j==0) { count += j; } } if(count==num) {cout << num << "是完全数" << endl;} else {cout << num << "不是完全数" << endl;}
//优化后
int count=0; for(int j=2; j*j<=num; j++) //由于约数是成对出现的,只要找到了前面一个约数,就可以通过除法简单拿到后面一个约数(注意:要写等于) { if(num%j==0) //如果j是约数,则num/j也是约数 { count=count + j + num/j; } } //1是特殊情况 if(count+1==num && num!=1) {cout << num << "是完全数" << endl;} else {cout << num << "不是完全数" << endl;}
二. 打印输出
2.1 菱形与曼哈顿距离
- 借助曼哈顿距离的原理,打印菱形(如下是5*5,距离大于2的部分打印空格)
//曼哈顿距离:中心点(n/2,n/2);目标点(i,j) int x = n/2; int y = n/2;
for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(abs(i-x)+abs(j-y)<=x) {cout << "*";} else {cout << " ";} } cout << endl; }
2.2 矩阵输出(这里还是不太明白)
- 回文矩阵打印输出
- 距上下左右的最短距离就是数值
#include<iostream> using namespace std; int main() { int arr[110][110]; for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { //距上下左右的最小值 arr[i][j] = min(min(i,j),min((n-i+1),(n-j+1))); cout << arr[i][j] << " "; } cout << endl; } cout << endl; return 0; }
- 螺旋回文矩阵打印输出(不是很理解)
int main() { int m,n; //m行n列的蛇形矩阵 scanf("%d%d",&m,&n); int dx[] = {-1,0,1,0}; int dy[] = {0,1,0,-1}; //dx和dy数组用于调整方向 int g[110][110] = {0}; //初始化数组元素全为0 int x = 0,y = 0,d = 1; for(int i = 1;i <= m*n;i ++) { g[x][y] = i; int a = x + dx[d]; //开始时先向右移,所以从d=1开始 int b = y + dy[d]; //a和b记录要移动到的位置 if(a < 0 || a >= m || b < 0 || b >= n || g[a][b]) //边界处理,如果满足这四种条件中的一种,即越界,需要改变方向。 { d = (d + 1) % 4; //顺时针改变方向操作 a = x + dx[d]; b = y + dy[d]; } x = a; y = b; } for(int i = 0;i < m;i ++) //输出蛇形矩阵 { for(int j = 0;j < n;j ++) { printf("%d ",g[i][j]); } printf("\n"); } }
(Acwing.756. 蛇形矩阵)
- 矩阵打印输出
#include<iostream> using namespace std; int main() { int arr[110][110]; for(int i=0; i<n ; i++) { for(int j=0; j<n; j++) { if(i==j) { arr[i][j] = 1; }
// arr[i][j]中 i、j 的距离 else { arr[i][j] = max(i,j) - min(i,j) + 1;} cout << arr[i][j] << " "; } cout << endl; } cout << endl; return 0; }
三. 字符串
3.1 字符串的读取
-
使用 cin 输入字符串时,遇到空格或回车就会停止读取
- 那么要读取含空格字符串的时候,有以下3种方法:
fgets(arr,100,stdin);
cin.getline(arr,100);
getline(cin,100); //string
一个变形体(牢记 string 类型的含空格读取好吧)
#include <string>
string s;
getline(cin, s); //读取含空格的一整行
3. 求字符串长度的函数
#include<string.h> //引入头文件 strlen(arr);
4. 用一个变量存字符串长度,提高运行效率
#include<string.h> //引入头文件
int L = strlen(arr);
for(int i=0; i<L; i++){} //遍历数组arr
5. 妈的,不要忘记输入啊啊啊啊啊(我就说跑不出东西来)
6. string 的长度
#include <string>
string s;
cout << s.size() <<endl;
cout << s.length() << endl; //(网上建议是:获取字符串的长度用length)
7. 将 string 对象当成字符数组来处理:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "hello world";
for (int i = 0; i < s.size(); i++) cout << s[i]; //hello world
for (char c : s) cout << c; //hello world(等价于上面的for遍历)
return 0;
}
.
1. 有些语言中 (4/3) 无法得到 1.3333,建议在公式中使用 (4/3.0)
2. printf保留小数
printf("XXX = %.3f",ans);
3. 提供一个思路:如遇浮点数精度问题,可以乘以小数位,转换为整形来做
4. 不是(a == b == c),而是(a == b && b == c)
5.三数排序:
if(b > a) { swap(a,b); } if(c > a) { swap(c,a); } if(c > b) { swap(c,b); }
6. 用递归的方法求 n 的阶乘:
//递归的原理是套娃行为:n!= n * (n-1)! int func(int n) { if(n==1) {return 1;} //拐点 return n*func(n-1); }
同理,用递归的方法求第n个斐波那契数列的值:
//斐波那契数列:1,1,2,3,5(这个数列从第三项开始,每一项都等于前两项之和)
//递归的方法:f(n)=f(n-1)+f(n-2) int func(int n) { if(n==1 || n==2) return 1; //拐点 return func(n-1)+func(n-2); }
7. 循环输入大法(遇0结束)
int n; //全局变量 int main() { while(cin >> n,n){} }
8. 空间开辟的区分
int* p = new int; //用new开辟了一个整型存储空间,并将该空间地址赋给p int* p = new int(10); //用new开辟了一个整型存储空间,并赋初值10 int* p = new int[10]; //用new开辟了一个长度10的连续整型数组存储空间
分类:
以练促学
标签:
以练促学:C++基础语法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具