中级守护
4699 矩阵置零经验值:1200 时间限制:1000毫秒
题目描述 Description
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。例如,输入矩阵为
1 1 1
1 0 1
1 1 1
清零后,矩阵为
1 0 1
0 0 0
1 0 1
输入描述 Input Description
m+1行,第一行两个整数m、n,表示输入矩阵的大小
接下来m行,每行n个数,为0或1
输出描述 Output Description
清零后的矩阵,同一行相邻的数用空格隔开
样例输入 Sample Input
3 3
1 1 1
1 0 1
1 1 1
样例输出 Sample Output
1 0 1
0 0 0
1 0 1
数据范围及提示 Data Size & Hint
1<=m,n<=100
#include<iostream>
using namespace std;
int n,m,a[105][105],pos=0;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){ // 1 0 1
for(int j=1;j<=m;j++){// 0 0 0
cin>>a[i][j]; // 1 0 1
}
}
for(int i=1;i<=n;i++){// i=2 j=2
/*if(pos==1){
break;
}*/
for(int j=1;j<=m;j++){
if(a[i][j]==0){
for(int q=1;q<=n;q++){
a[q][j]=1234567;
}
for(int p=1;p<=m;p++){
a[i][p]=1234567;
}
//break;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==1234567){
a[i][j]=0;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
为什么只有30分,哪错了?
新手启示者
看不懂。。。
#include < >
using namespace std;
int main(){
int m,n,a[ ][ ],b[ ][ ];
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>a[ ][ ];
b[ ][ ]=a[ ][ ];
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(!a[i][j]){
for(int k=1;k<=m;k++){
b[ ][ ]=0;
}
for(int k=1;k<=n;k++){
b[ ][ ]=0;
}
}
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cout<<b[ ][ ]<<' ';
}
cout<< ;
}
return 0;
}
空白自己想