题目:1097 矩阵行平移 - PAT (Basic Level) Practice (中文) (pintia.cn)
解析:PAT乙级 1097 矩阵行平移_哔哩哔哩_bilibili
坑点:
思想
这道题是一道模拟题,考察对数组的元素的挪动。
我们拿样例举例:
首先第一个奇数行(1)挪动一个元素
第二个奇数行(3),挪动两个元素
第三个奇数行(5),挪动3个元素,这时候因为3超出了k值(k为2),所以需要3%k=1,只需要挪动1个元素
第四个奇数行(7),继续需要挪动4个元素,超K,%k=2,需要挪动两个元素。
往后的所有奇数行需要挪动的元素如果超过了k,都需要%k得到一个新值u,这个u就是需要挪动的元素。
js
#include<bits/stdc++.h>
using namespace std;
int g[105][105];
int main()
{
int n,k,x;cin>>n>>k>>x;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>g[i][j];
}
}
int count=0;
for(int i=0;i<n;i+=2) //奇数行平移
{
int u=count%k; //为了防止超出k,需要对k求余
//平移
for(int j=n-1;j>u;j--) //从后往前挪防止数值被覆盖
{
g[i][j]=g[i][j-1-u];
}
//填充
for(int j=0;j<=u;j++)
{
g[i][j]=x;
}
count++;
}
//检查平移后的矩阵
// cout<<endl;
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cout<<g[i][j]<<" ";
// }
// cout<<endl;
// }
//输出
for(int i=0;i<n;i++)
{
int sum=0;
for(int j=0;j<n;j++)
{
sum+=g[j][i];
}
if(i==0)cout<<sum; //第一个不输出空格
else cout<<" "<<sum;
}
return 0;
}