基础输入输出

int(整数),char(字符),short(短整数[基本不用]),int(整数 -2147483647 ~ 2147483648),
long long(长整数 -9223372036854774808 ~9223372036854774807),
double(双精度浮点数,实数,小数),float(单精度浮点数[几乎不用]),bool(布尔[判断真假])
int x;// 声明一个整数变量x
cin>>x;
cout<<x;
cout<<fixed<<setprecision(k)<<x;//保留k位小数

四则运算
+(加),-(减),*(乘),/(除), %(余)
注意:
1.余数的正负由被除数决定
2.浮点数没有取余运算
3.如果a和b都是整数,则a/b会得到a除以b的商。

char ch='k'
int x=ch;//这样可以得到变量ch表示的字符的ascii码
1.上取整
(a+b-1)/b

2. 换水问题
int t=a;
a=b;
b=t;

3.拆数
求某一位就是除以多少,然后%10
例:x的百位     x/100%10;

4.四舍五入
int k=round(x)// k是 x 4舍5入的结果

常见的ascii

'0'~'9' 48~57
'A'~'Z' 65~90
'a'~'z'  97~122
' '   32

条件语句

if判断

if(条件1)
{
	//语句1	
} 

if(条件1)
{
	//语句1
}
else
{
    //其它语句	
}

if(条件1)
{
	//语句1
}
else if(条件2)
{
	//语句2
}...
else
{
    //剩余语句	
}
逻辑连接符
a&&b 只有a和b同时为真的时候整个语句为真
a||b 只要a和b有一个为真的时候整个语句为真
!a 当a为假的时候,整个语句为真

运算符优先级 !>&&>||

1.绝对值
1.1 
if(x<0)
{
	x=x*-1;	
} 
1.2
x=abs(x)
2. 奇偶数判断
2.1 奇数判断
if(n%2!=0)
{
	//当n为奇数的时候执行 
}
2.2 偶数判断
if(n%2==0)
{
	//当n为偶数的时候执行 
}
3.字符类型判断
if(ch>='a'&&ch<='z')
{
	//小写字符判定 
}

if(ch>='A'&&ch<='Z')
{
	//大写字符判定 
}

if(ch>='0'&&ch<='9')
{
	//数字字符判定 
}
4.闰年判断
if(year%4==0&&year%100!=0||year%400==0)
{
	//当year为闰年的时候执行 
}

开关语句

switch(n)
{
	case 1:
		//语句
		break;
	case 2:
		//语句2
		break;
	default: 
		//默认语句 
}

循环语句

while循环

状态初始化
while() //状态判断 
{
	//语句块	
	//状态更新 
}

遍历 m到n之间的所有数(包括m和n)
int t=m;
while(t<=n)
{
    //t为m到n之间的每个数
    t++;
}

先执行语句块再进行条件判断
do
{
	//语句块 
}while() //状态判断

拆数模板

while(t)
{
	int ge=t%10;
	//对当前个位进行操作 
	t/=10;
}
//拆数完成以后,t的值为0

翻转数模板
int res=0;
while(t)
{
	int ge=t%10;
	res=res*10+ge;
	t/=10;
}
//res是t翻转以后的结果

for循环

for(初始化;判断;更新)
{
	语句块;	
}

1.输出a到b之间的数
for(int i=a;i<=b;i++)
{
    cout<<i<<" ";
}

2.求和模板
int s=0;
for(int i=1;i<=n;i++)
{
    int x;
    cin>>x; 
    s+=x;
}

3.最大值模板
3.1 maxv初始化
int maxv=-1; //(初始化成最小值)
for(int i=1;i<=n;i++)
{
	int x;
	cin>>x;
	if(x>maxv)
	{
		maxv=x;
	}
}

3.2 maxv不初始化
int maxv;
for(int i=1;i<=n;i++)
{
	int x;
	cin>>x;
	if(i==1||x>maxv) //如果是第一个,或者当前元素比最大值大
	{
		maxv=x;
	}
}

4.最小值模板
4.1 minv初始化
int minv=1000; //(初始化成较大值)
for(int i=1;i<=n;i++)
{
	int x;
	cin>>x;
	if(x>minv)
	{
		minv=x;
	}
}
4.2 minv不初始化
int minv;
for(int i=1;i<=n;i++)
{
	int x;
	cin>>x;
	if(i==1||x>minv)
	{
		minv=x;
	}
}

5.统计类模板
int cnt=0;
int m;
cin>>m;
for(int i=1;i<=n;i++)
{
	int x;
	cin>>x;
	if(x==m) //判断当前元素是否等于x 
	{
		cnt++;	
	}	
}

6.次方类题目(a^b)
int s=1;
for(int i=1;i<=b;i++)
{
	s=s*a;
}

7.质数判断
bool st=true;
int n;
cin>>n;
if(n<2) //小于2不在质数的判定范围以内 
{
	st=false;
}
for(int i=2;i<=n/i;i++) //枚举小因子 
{
	if(n%i==0) //存在小因子 
	{
		st=false;
	}
}
if(st==true)
{
	//满足质数需要执行的内容 
}
else
{
	//不满足质数需要执行的内容 
}

8.枚举类题目(百钱百鸡)
for(int i=0;i<=20;i++) //公鸡的数目 
{
	for(int j=0;j<=33;j++) //母鸡的数目 
	{
		for(int k=0;k<=100;k+=3) //小鸡的数目 
		{
			if(i+j+k==100&&5*i+3*j+k/3==100) //百钱百鸡 
			{
				cout<<i<<" "<<j<<" "<<k<<endl;
			}
		}
	}
}

break 语句
循环
{
	if(条件1)
	{
		break;	
	}	
	语句1 
}
语句2  //当条件1条件为真时,直接跳到语句2执行


continue
循环
{
	if(条件1)
	{
		continue;	
	}	
	语句1 
}
语句2  //当条件1条件为真时,跳到循环的那句继续执行

数组

一维数组

数组: 数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。
组成数组的各个变量称为数组的元素。用于区分数组的各个元素的数字编号称为下标。
一般为了方便会比题目多开10个空间 
int a[100];//声明一个可以存放100个元素的整数数组 
int a[100]={1,4,2};//将a[0]=1,a[1]=4,a[2]=2

一般我们会使用一个常量来声明数组的大小
const int N=110; //声明一个大小为110的常量N 
int a[N]; //声明一个可以放110个元素名为a的数组 

//输入n个元素的数组,数组变量名是i,下标从1开始 
for(int i=1;i<=n;i++)
{
	cin>>a[i];
} 

//顺序输出输出的每个元素
for(int i=1;i<=n;i++)
{
	cout<<a[i]<<" "; //元素和元素之间用空格隔开 
} 
 
//元素之间需要输出逗号的时候,我们一般会让逗号跟着前面一个元素或者是后面一个元素

//前一个元素
for(int i=1;i<n;i++)
{
	cout<<a[i]<<",";
}
cout<<a[n]; 

//后一个元素
cout<<a[1];
for(int i=2;i<=n;i++)
{
	cout<<","<<a[i];
}

//冒泡排序
for(int i=1;i<=n;i++) //每轮确定一个元素的位置 
{
	for(int j=1;j+1<=n-i+1;j++) //第i轮确定第n-i+1这个位置上的值 
	{
		if(a[j]>a[j+1]) //比较相邻的两个元素 
		{
			swap(a[j],a[j+1]);
		}
	}
} 

//标记法
a[i]=1,a[j]=1,a[k]=1,表示位置i,j,k位置具有相同的属性
a[o]=2,a[p]=2,a[q]=2,表示位置o,p,q位置具有相同的属性

//最长平台
for(int i=1;i<=n;i++)
{
	int j=i;
	while(j<=n&&满足属性) j++;
	j==;
	//这个时候i是当前平台的第一个元素,j是当前平台的最后一个元素 
	i=j;	//跳到平台的最后一个位置 
}

二维数组

int a[N][M]={{1,2,3},{4,5}};
a[0][0]=1,a[0][1]=2,a[0][2]=3
a[1][0]=4,a[1][1]=5;
一般矩阵习惯从1,1开始到 n,m结束 ,n表示行 ,m表示列

 
矩阵的边缘判断 i==1||i==n||j==1||j==m 


点(i,j)对应的上(x-1,j),下(x+1,j),左(x,j-1),右(x,j+1);
点(i,j)到上(i),下(n-i+1),左(j),右(m-j+1) 

和(i,j)同左上到右下的对角线 (i-j==x-y) 
和(i,j)同左下到右上的对角线 (i+j==x+y) 

输入一个n行m列,以(1,1)开始的变量名为a的二维数组
for(int i=1;i<=n;i++)
{
	for(int j=1;j<=m;j++)
	{
		cin>>a[i][j];
	}
} 

输出一个n行m列,以(1,1)开始的变量名为a的二维数组
for(int i=1;i<=n;i++)
{
	for(int j=1;j<=m;j++)
	{
		cout<<a[i][j]<<" ";
	}
	cout<<endl;//每输出完一行,输出换行 
} 

矩阵加法 c[i][j]=a[i][j]+b[i][j];

矩阵乘法
for(int k=1;k<=t;k++) //t是第一个矩阵的列数,也是第二个矩阵的行数 
{
	c[i][j]+=a[i][k]*b[k][j];
}

5 条评论

  • 1