题目描述
给你一个n*n的矩阵,统计每个元素所在的行,列。有多少个比它大的元素个数。
输入格式
输入的第一行是一个整数n(0<n<20),测试表示矩阵的大小。
随后是一个n*n的矩阵,总共n行,每一行n个数,用空格隔开。
输出格式
按要求输出一个n*n的矩阵,表格数字表示比当前行列大的元素个数。
样例输入
3
1 2 3
4 5 6
7 8 9
样例输出
4 3 2
3 2 1
2 1 0
思路
1.老样子,先解读题:把每个数字作为一个“十字架”(所在的行,列)的中心点,求“十字架”上有多少个比这个数大的数。
2.还是很简单的一步,先把数组的值输进去。
int n;
cin>>n;
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
cin>>a[i][j];
}
}
3.然后我们给每个数字的行和列分别遍历一遍,在此之前先设个变量sum来记录有几个数比它大。但要记得sum要归零。
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
int sum=0;
for (int q=1;q<=n;q++){//所在列
if(a[i][j]<a[i][q]){
sum+=1;
}
}
for (int q=1;q<=n;q++){//所在行
if(a[i][j]<a[q][j]){
sum+=1;
}
}
}
}
4.最后再输出就行了。
(点个赞再走吧)
完整代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[25][25];
int main(){
int n;
cin>>n;
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
int sum=0;
for (int q=1;q<=n;q++){//所在列
if(a[i][j]<a[i][q]){
sum+=1;
}
}
for (int q=1;q<=n;q++){//所在行
if(a[i][j]<a[q][j]){
sum+=1;
}
}
cout<<sum<<' ';
}
cout<<endl;
}
return 0;
}