×

欢迎光临,有什么想法就留言告诉我吧!

你的精彩评论可能会出现在这里哦! 留言抢沙发

置顶 关于我们

C++笔记(更新中...)

Very2 Very2 发表于1980-03-01 浏览18411 评论0
/*1.分析已知与未知 2.数据定义
3.输入 4.算法实现 5.输出*/
#include<bits/stdc++.h>	//万能头
using namespace std;	//命名空间
int main() {			//主函数
	cout<<"授课笔记完整版";
	return 0;
}
一、基本数据类型
	int a1=6,a2=int(6.9999); //整型
	long long l=6666666666; //长整型 
	float f=3.14; //单精度 
	double d=3.1415926; //双精度 
	char c1='A',c2=char(90); //字符类型
	bool b1=false,b2=true; //true真 false假

二、变量的定义与使用 
	int _2a; //字母、数字、下划线
	数字不能开头;不能用关键字;
	变量的作用域:
	循环中定义的变量,只能在循环中用

三、运算符 
	//算术运算 加减乘除 整除 求余(模) 
	a+b;a-b;a*b;a/b;a%b; 
	//逻辑运算 与或非 
	与(有0则0,无0才1)
	或(有1则1,无1才0) 
	a&&b;a||b;!a;
	//关系运算 大于、小于、等于...
	a>b;a<b;a==b;a>=b;a<=b;a!=b;
	//自增自减
	a++;b--;
	i++;先用后加;
	++i;先加后用; 
	//三目运算 A?B:C
	//if(A) {B} else{C} 

四、基本语句
	int a; double b; char c;
	
	//输入输出语句 
	cin>>a>>b>>c;//>>向右是输入
	scanf("%d %f %c",&a,&b,&c);
	//格式串  d十进制整数,f浮点数,c字符 
	
	cout<<a<<b<<c;//<<向左是输出
	cout<<fixed<<setprecision(2)<<b;
	printf("%d %.2f %c",a,b,c);
	// %.2f 代表保留2位小数 
	
	//分支语句:条件"不重复 且 不遗漏"
	if...else...
	if...else if...
	
	switch(整数){
	case 1: 语句;break;
	case 2:	语句;break;
	default: 语句; 
	}
	从冒号:开始向下执行,遇break跳出  
	
	//循环语句 for while do...while
	循环三要素:条件、初始/步长、循环体
	for(初始i=1;条件i<n;步长i++){
		循环体 s++;
	}
	
	初始 
	while(条件){
		循环体;
		步长; 
	}
	
	初始 
	do{
		循环体;
		步长; 
	} while(条件)
	
	break;		跳出本层循环
	continue;	跳过本次循环
	 
	打表法解题:
	表头列出关键变量,纵向变量变化过程) 


五、数组:一维/二维/字符数组
	1.定义(初始化) 下标从0开始 
	类型  数组名[长度] ={元素1,元素2...}
	类型  数组名[行长][列长] ={元素1,元素2...}
	int a[5]={2,4,6,8,10}; 
	int b[5][5]={{1,2,3,4,5},{6,7,8},{}}
	char c[5]={'l','w','l','$'}
	
	2.引用
	数组名[下标]
	数组名[行号][列号]
	a[0]=666; 
	b[0][0]=888;
	b[1][3]=9; 
	c[0]='w';
	
	3.场景
	循环输入/输出 数组每个元素
	//一维数组:一层循环 
	for(int i=1;i<=5;i++){
		cin>>a[i];
		cout<<a[i]<<" ";
	} 
	//二维数组:二层循环 
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			cin>>a[i][j];
			cout<<a[i][j]<<" ";
		}
	} 
	
六、字符数组 与 字符串类 
	1. 定义(初始化) 
	1)字符数组 写法: 
	char c[20]="Hello World "; //字符串 赋值
	cin.getline(字符串名,长度);//输入含空格字符串 
	cin.getline(c,5); 
	
	2)字符串类 写法:
	string c="Hello"; //字符串 赋值 默认尾部加'\0'
	getline(cin,字符串名);//输入含空格字符串
	getline(cin,c);
	
	2.相关函数与操作 
	1)字符数组 函数: 
	char c1[20]="hello",c2[20]="World"; 
	strcat(c1,c2);//拼接concatenate 
	strcpy(c1,c2);//复制copy 
	strcmp(c1,c2);//比较compare 
	strlen(c1);//字符串长度length 
	strlwr(c1);//转小写 low 非标准库函数 
	strupr(c1);//转大写 up 非标准库函数

	2)字符串类  操作 
	string s1,s2;
	s1=s1;//赋值
	s1+=s2;//拼接
	s1==s2;s1!=s2;//判断是否相等
	s1<s2;//判断大小
	s1.empty();//是否为空
	s.length() / s.size()    返回字符串长度    
	s.substr(pos, len)    截取子串(从 pos 开始 len 个字符)
	s.find(str)    查找子串位置,未找到返回 string::npos
	s.insert(pos, str)    在 pos 位置插入字符串
	s.erase(pos, len)    从 pos 开始删除 len 个字符
	s.replace(pos, len, str)    替换从 pos 开始的 len 个字符为 str    

七、函数 
(一)标准函数: 
abs() 求绝对值 	abs(-4) 返回4 
sqrt()	开平方根
max()	求最大值 max(5,6);   //返回6 
min()	求最小值 
ceil()	向上取整
floor() 向下取整
 
(二)自定义函数: 
	1.函数的定义: 
	返回类型  函数名(参数列表){
		函数体    //执行语句
	}
	int add(int a,int b){
		return a+b;
	} 
	2.声明与引用;
	函数名(参数列表); 
	传值/传址;
	作用域

八、结构体与sort排序
	1.定义(初始化) 
	struct 结构体类型名{
		类型  要素1名;
		类型  要素2名;
		... 
	}; 
	struct stu{
		int num;
		char male;
	};
	stu j;
	2.引用  变量名.要素名
	j.num=666;
	
	3.场景 
	与sort排序结合运用 
	
	4.sort排序
	sort(数组起始下标,数组结束下标+1,自定义排序规则) 
	
	bool cmp(int a,int b){
		return a<b;
	}
	int a[6]={3,1,4,2,7,8};
	
	sort(a+0,a+5+1,cmp);

九、指针(变量)
	1. 定义(初始化)
	类型名 *变量名
	int *p=NULL; 
	int a;
	p=&a;	//&取地址 
	*p=20;	//*取值 
	
	2.引用
	
	3.场景(数组、字符串、函数...) 
	设有数组 a,指向 a 的指针变量为 pa,
	则有以下关系:
	pa、a、&a[0]均指向同一单元
	
	指针与字符串: 
	const char* s = "program";
    for (int i = 0; i < 7; i++)
	    cout << *(s + i);
	
十、进制转换
	(一)R进制>十进制:按权展开求和
	位高权重
	一个数的负数次幂=该数的正数次幂的倒数
	任何数的零次幂=1
	pow(x,y)=x的y次幂 
	(1101)2 = (13)10
	
	(二)十进制>R进制:整数(取余倒序) 
	异或  
	
	进制(满几进位) 
	
十一、算法:自然语言、流程图、伪代码
	赋值:箭头
	
十二、队列
	1.定义:只能一端插入另一端删除的线性表
	2.特点:先进先出 
	3. STL:
	声明:queue<数据类型>队名,
	例如:queue<int>q
	相关函数:
	q.push();        添加元素
	q.front();        获取队首元素
	q.pop();        删除队首元素
	q.size();        获取元素个数
	q.empty();    判断队列为空

	优先队列:
	priority_queue<数据类型> q;        //声明一个用来存某数据类型的优先队列,名字叫q
	相关函数(其他同队列):
	q.top();    获取队首元素,队列用的是q.front();
	priority_queue<int>q;        //默认是大的先出来
	priority_queue<int,vector<int>,less<int> >q1;        //大的先出来
	priority_queue<int,vector<int>,greater<int> >q2;    //小的先出来
	
	4.自己写:(详见后附) 

十三、栈
	1.定义:只能一端插入或删除的线性表
	2.特点:先进后出 
	3. STL:
	声明:stack<数据类型>栈名,
	例如:stack<int>s
	相关函数:
	s.push();        元素入栈
	s.top();        获取栈顶元素
	s.pop();        删除栈顶元素
	s.size();        获取元素个数
	s.empty();    判断栈为空
	4.自己写: (详见后附)

十四、顺序表
//顺序表基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType; 
typedef struct 
{	ElemType data[MaxSize];		//存放顺序表元素
   	int length;					//存放顺序表的长度
} SqList; 						//顺序表的类型
void CreateList(SqList *&L,ElemType a[],int n)
//建立顺序表
{
	L=(SqList *)malloc(sizeof(SqList));
	for (int i=0;i<n;i++)
		L->data[i]=a[i];
	L->length=n;
}
void InitList(SqList *&L)
{
	L=(SqList *)malloc(sizeof(SqList));	//分配存放线性表的空间
	L->length=0;
}
void DestroyList(SqList *&L)
{
	free(L);
}
bool ListEmpty(SqList *L)
{
	return(L->length==0);
}
int ListLength(SqList *L)
{
	return(L->length);
}
void DispList(SqList *L)
{
	for (int i=0;i<L->length;i++)
		printf("%d ",L->data[i]);
	printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)
{
	if (i<1 || i>L->length)
		return false;
	e=L->data[i-1];
	return true;
}
int LocateElem(SqList *L, ElemType e)
{
	int i=0;
	while (i<L->length && L->data[i]!=e) i++;
	if (i>=L->length)
		return 0;
	else
		return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
	int j;
	if (i<1 || i>L->length+1 || L->length==MaxSize)
		return false;
	i--;						//将顺序表位序转化为elem下标
	for (j=L->length;j>i;j--) 	//将data[i]及后面元素后移一个位置
		L->data[j]=L->data[j-1];
	L->data[i]=e;
	L->length++;				//顺序表长度增1
	return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
	int j;
	if (i<1 || i>L->length)
		return false;
	i--;						//将顺序表位序转化为elem下标
	e=L->data[i];
	for (j=i;j<L->length-1;j++)	//将data[i]之后的元素前移一个位置
		L->data[j]=L->data[j+1];
	L->length--;				//顺序表长度减1
	return true;
}
 
十五、二分法
使用前提:有序性 

核心代码: 
mid=l+(r-l)/2; 	//取中点值
r=mid-1; 		//向左半找
l=mid+1; 		//向右半找

典型题目:
二分查找:P2249
二分答案: 
P1873 砍树
P2440 木材加工
P1577 切绳子
P1102 A-B数对
P1824 进击的奶牛
P1182 数列分段 Section II

张子祺

2021_cap_j

张子祺 张子祺 发表于2026-09-05 浏览264 评论0

1.不属于面向对象程序设计语言的是C语言

2.与计算机领域最相关的奖项是图灵奖

3.目前主流的计算机储存数据最终都是转换成二进制数据进行储存。

4.以比较作为基本运算,在 N 个数中找出最大数,最坏情况下所需要的最少的比较次数为n-1次

5.栈:后进先出;只能先弹出栈顶元素;自己推(

6.对于有 n个顶点、m 条边的无向连通图 (m>n),需要删掉m−n+1条边才能使其成为一棵树

7..n进制转十进制:第a位=数值*n的a-1次方

关于我们

2022_csp_j

张子祺 张子祺 发表于2026-09-05 浏览749 评论0

1.面向对象特性不含输出

2..栈:后进先出;只能先弹出栈顶元素;自己推(

3.指针是指向变量的地址

4.数组大小固定,链表大小可动态调整

5.栈:后进先出;只能先弹出栈顶元素;自己推(

6.

7.哈夫曼树:直接画树;

8.完全二叉树左边节点=父节点*2,右=父节点*2+1;

9.有向连通图:用邻接矩阵至少有n个非零元素

10.可以用栈实现队列;

队列常常被用于广度优先搜索算法。 栈的访问原则后进先出,队列的访问原则是先进先出。

关于我们

2024_csp_j 1~15

张子祺 张子祺 发表于2026-08-29 浏览281 评论0

1.int 数据类型负数:奇数    正数:偶数

2.n进制转十进制:第a位=数值*n的a-1次方

3(a-1)*(b-1)*c*(a+b+c-组数)(最大值)

4.滚木;

5.MB=1024kb KB=1024B B=8 b

MB=1024KB=1024*1024B=1024*1024*8b

6.基本数据类型:可直接用于定义变量

7循环语句:for;while;do-while

关于我们

洛谷p1043

李澄瑞 李澄瑞 发表于2026-08-22 浏览285 评论0
#include<iostream>
using namespace std;
long long a[1001],x[1001],n,m,max1,min1=1000000000000000;
//x为一开始读入的数据,a为便于计算一段之和的前缀和 
long long f[101][101][11],f1[101][101][11]; 
//f数组存最大值,f1数组存最小值 
int main(){
	cin>>n>>m;
	for (int i=1;i<=100;i++)
		for (int j=1;j<=100;j++)
			for (int k=1;k<=10;k++)
				f1[i][j][k]=10000000000;
	//先给f1数组赋上巨大的值,便于计算之和的最小值 
	for (int i=1;i<=n;i++)
	{
		cin>>x[i];//读入 
		a[i]+=a[i-1]+x[i];//前缀和 
	}
	//化环为链 
	for (int i=n+1;i<=n*2;i++) a[i]+=a[i-1]+x[i-n];//前缀和 
	for (int i=1;i<=n*2;i++)
		for (int j=1;j<=n*2;j++)
		{
			f[i][j][1]=(a[j]-a[i-1]+100000000000)%10;//前缀和求一段数的和 
			f1[i][j][1]=(a[j]-a[i-1]+100000000000)%10;//前缀和求一段数的和 
			//因为输入有负数,所以a[j]可能会小于a[i-1],所以我们给他加上巨大值 
		}
	//赋初始值	
	for (int i=1;i<=n*2;i++)//枚举开始的数字位置 
	{
		for (int j=i+1;j<=n*2;j++)//枚举结束的数字位置 
		{
			for (int l=2;l<=m;l++)//枚举分段的数量 
			{
				for (int k=i;k<j;k++)//枚举中间数的位置 
				{
					f[i][j][l]=max(f[i][j][l],f[i][k][l-1]*f[k+1][j][1]);//动态规划转移方程
					f1[i][j][l]=min(f1[i][j][l],f1[i][k][l-1]*f1[k+1][j][1]);//动态规划转移方程 
				}
			}
		}
	}
	for (int i=1;i<=n;i++) 
	{
		max1=max(max1,f[i][i+n-1][m]);//求一段的最大值 
		min1=min(min1,f1[i][i+n-1][m]);//求一段的最小值  
	}
	cout<<min1<<endl<<max1<<endl;//输出
	return 0; 
}

汤达友

0820 比比拉布

汤达友 汤达友 发表于2026-08-20 浏览284 评论0
#include <bits/stdc++.h>
using namespace std;int main(){
	
	sudstr(a,n) //从下标 a取 n个字符
	find() //查找子串(从左)
	replace(a,n,str) //把从 a起 n个字符替换
	insert(a,str) //在下标 a处插入
	append(str)//在末尾追加
	
	'A'=65,'a'=97,'0'=48  //ASCLL码
	tolower(c) //大写转小写 
	toupper(c) //小写转大写
	           //'a'-'A'=32 
	 
	if(c>='a' && c<='z')  //小写 
	if(c>='A' && c<='Z')  //大写
	if(c>='0' && c<='9')  //数字 
						  //判断字符类型 
return 0;}	

李澄瑞

mixly遥控风扇

李澄瑞 李澄瑞 发表于2026-08-19 浏览281 评论0
#include <IRremote.h>

const int IR_RECV_PIN = A0;
const int FAN_PIN_A2 = A2;
const int FAN_PIN_A3 = A3;

IRrecv irrecv(IR_RECV_PIN);
decode_results results;

bool fanState = false;
// 你的按键码 FFA25D
const unsigned long TARGET_KEY = 0xFFA25D;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();

  pinMode(FAN_PIN_A2, OUTPUT);
  pinMode(FAN_PIN_A3, OUTPUT);
  digitalWrite(FAN_PIN_A2, LOW);
  digitalWrite(FAN_PIN_A3, LOW);
}

void loop()
{
  if (irrecv.decode(&results))
  {
    Serial.print("收到码值 HEX: ");
    Serial.println(results.value, HEX);

    // ✅过滤NEC长按重复码 0xFFFFFFFF,只有真正按键才执行
    if(results.value != 0xFFFFFFFF)
    {
      if (results.value == TARGET_KEY)
      {
        fanState = !fanState;
        if (fanState)
        {
          digitalWrite(FAN_PIN_A2, HIGH);
          digitalWrite(FAN_PIN_A3, HIGH);
          Serial.println("👉风扇开启 A2 A3 = HIGH");
        }
        else
        {
          digitalWrite(FAN_PIN_A2, LOW);
          digitalWrite(FAN_PIN_A3, LOW);
          Serial.println("👉风扇关闭 A2 A3 = LOW");
        }
      }
    }
    irrecv.resume();
  }
}