题目: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就是需要挪动的元素。
#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)
{
//第一个奇数行移动1位。第二个移动2位
int u=count%k;
//从最后一位开始,前面的往后挪
for(int j=n-1;j>u;j--)
{
g[i][j]=g[i][j-1-u]; //-1是为了确保当%k的时候至少还可以挪一位
}
count++; //count要每奇数行++
//填充
for(int j=0;j<=u;j++) //上面是从u的位置开始挪的,因此这里要把u补上
{
g[i][j]=x;
}
}
// //输出矩阵 (检验)
// 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;
}#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)
{
//第一个奇数行移动1位。第二个移动2位
int u=count%k;
//从最后一位开始,前面的往后挪
for(int j=n-1;j>u;j--)
{
g[i][j]=g[i][j-1-u]; //-1是为了确保当%k的时候至少还可以挪一位
}
count++; //count要每奇数行++
//填充
for(int j=0;j<=u;j++) //上面是从u的位置开始挪的,因此这里要把u补上
{
g[i][j]=x;
}
}
// //输出矩阵 (检验)
// 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;
}