【以练促学: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的连续整型数组存储空间

 

 

 

 
posted @   哟吼--小文文公主  阅读(130)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示