- 分享
基础语法知识点2(字符数组到位运算)
- 2024-1-25 10:12:44 @
二维数组
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];
}
排序
插入排序(找到第一个小于等于它的元素插入到后面)
for(int i=2;i<=n;i++)
{
int j=i-1; //比较元素的位置
int t=a[i]; //当前元素
while(j>=1&&a[j]>t) //继续往前移动
{
a[j+1]=a[j];
j--;
}
a[j+1]=t; //找到了合适的位置
}
选择排序(每次选择一个最小的元素放在当前位置)
for(int i=1;i<=n;i++)
{
int t=i;
for(int j=i+1;j<=n;j++) //枚举i以后的所有位置
{
if(a[j]<a[t])
{
t=j;
}
}
swap(a[t],a[i]);
}
计数排序(依次统计每个数出现的次数,然后依次放到新数组之中)
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
cnt[x]++;//统计x出现的次数
}
int i=1;
for(int j=0;j<M;j++) //枚举整个范围
{
while(cnt[j]>0) //出现过就放到a数组之中
{
a[i++]=j; //依次存放
cnt[j]--; //j个数少1
}
}
//快速排序
sort(a,a+n) //a[0]到a[n-1]从小到大排序
reverse(a,a+n) //a[0]到a[n-1] 翻转
sort(a,a+n,greater<int>()) //a[0]到a[n-1]从大到小排序
sort(a+1,a+n+1) //a[1]到a[n]从小到大排序
struct Stu{
string name;
int sc;
};
//定义了一个包含名字和分数的Stu类型的数据类型
Stu a;//声明了一个Stu类型的变量a
Stu b[100]; //声明了一个Stu类型的数组b
bool cmp(Stu a,Stu b)
{
if(a.sc>b.sc) return 1;//按照成绩从大到小排序
if(a.sc==b.sc&&a.name<b.name); //成绩相同,按照名字的字典序排序
return 0; //不符合规则
}
sort(b+1,b+1,cmp);//b[1]到b[n]按照cmp定义的规则排序
struct Stu{
string name;
int sc;
bool operator<(const Stu& w)const
{
if(sc>w.sc) return 1;
if(sc==w.sc&&name<w.name) return 1;
return 0;
}
};
//定义了一个包含名字和分数的Stu类型的数据类型,且确定了排序规则
//可以直接使用(b+1,b+n+1) 进行排序
0 comments
No comments so far...