第1题 二维数组的输出
读入一个n行m列的二维数组(方阵、矩阵),按下述要求输出。所有数据都是正整数(100以内)。(1<=n,m<=10)
输入格式
第一行空格隔开的四个数字:n,m,p,q;(保证1<p<n,1<q<m且p,q不同)
接下来是一个n行m列的矩阵。
输出格式
第一行输出矩阵的第一行的数据。
第二行输出矩阵的最后一行的数据。
第三行输出矩阵的第p行的数据。
第四行输出矩阵的第q列的数据。
输入/输出例子1
输入:
5 6 3 4
1 2 3 4 5 3
3 5 9 2 4 1
4 3 6 8 2 9
9 7 5 9 7 3
22 9 7 5 3 12
输出:
1 2 3 4 5 3
22 9 7 5 3 12
4 3 6 8 2 9
4 2 8 9 5
#include<bits/stdc++.h>
using namespace std;
long long n,m,p,q;
long long a[105][105];
int main(){
cin>>n>>m;
cin>>p>>q;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
cin>>a[i][j];
for (int i=1;i<=m;i++)
cout<<a[1][i]<<" ";
cout<<endl;
for (int i=1;i<=m;i++)
cout<<a[n][i]<<" ";
cout<<endl;
for (int i=1;i<=m;i++)
cout<<a[p][i]<<" ";
cout<<endl;
for (int i=1;i<=n;i++)
cout<<a[i][q]<<" ";
cout<<endl;
return 0;
}
第2题 二维数组的输出2
读入一个n行n列的二维数组(方阵、矩阵),按下述要求输出。所有数据都是正整数(100以内)。(1<=n,m<=10)
输入格式
第一行三个数字:n,p,q; (p,q不同)
接下来是一个n行n列的矩阵。
输出格式
第一行输出矩阵的第一列的数据。
第二行输出矩阵的最后一列的数据。
第三行输出矩阵的左斜边的数据(从上到下)。
第四行输出矩阵的右斜边的数据(从上到下)。
第五行输出矩阵的左斜边的数据(从下到上)。
第六行输出矩阵的p行q列的数据。
输入/输出例子1
输入:
5 5 3
1 2 3 4 5
3 5 9 2 4
4 3 6 8 2
9 7 5 9 7
0 9 7 5 3
输出:
1 3 4 9 0
5 4 2 7 3
1 5 6 9 3
5 2 6 7 0
3 9 6 5 1
7
#include <bits/stdc++.h>
using namespace std;
long long n,m,q,p;
long long a[105][105];
int main(){
cin>>n>>p>>q;
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++)
{
cout<<a[i][1]<<" ";
}
cout<<endl;
for(int i=1;i<=n;i++)
{
cout<<a[i][n]<<" ";
}
cout<<endl;
for(int i=1;i<=n;i++)
{
cout<<a[i][i]<<" ";
}
cout<<endl;
int k=1;
for(int i=n;i>=1;i--)
{
cout<<a[k][i]<<" ";
k++;
}
cout<<endl;
for(int i=n;i>=1;i--)
{
cout<<a[i][i]<<" ";
}
cout<<endl;
cout<<a[p][q];
return 0;
}
第3题 改变二维数组
输入一个n行m列的二维数组,把它的奇数和偶数行互换后输出。
n,m为不超过20的正整数。数组内的数据为不大于200的正整数。
输入格式
共n+1行,第一行包括两个数字n和m。
第二行到第n+1行是这个数组里的数据。数据间用空格隔开。
输出格式
输出n行的改变后的数组。
输入/输出例子1
输入:
3 2
1 2
5 6
7 8
输出:
5 6
1 2
7 8
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long a[105][105];
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
cin>>a[i][j];
for (int i=1;i<n;i++) {
if (i%2==1) {
for (int j=1;j<=m;j++) {
swap(a[i][j],a[i+1][j]);
}
}
}
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
第4题 优质格子
操场被划分成n行m列的格子。刚刚下了一场暴雨,由于操场凹凸不平,有些格子是有积水的,有些格子是没有积水的。用1来表示没有积水,用0来表示有积水。如果某个格子X没有积水,而且与它相邻的上下左右4个格子都没有积水,那么格子X就称为“优质格子”。给出每个格子的状态,问总共有多少个格子是“优质格子”。
输入格式
第一行,两个整数n和m。1<=n,m<=200。
接下来是n行,每行有m个整数,每个整数要么是0要么是1。
输出格式
一个整数。
输入/输出例子1
输入:
4 4
1 0 1 1
1 0 1 1
0 1 1 1
0 0 1 1
输出:
5
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[205][205],s=0;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]==1){
a[i][j]=0;
}
else{
a[i][j]=1;
}
}
}
for(int i=1;i<=n;i++){
int bj=0;
for(int j=1;j<=m;j++){
if(a[i][j]==0){
bj=1;
if(a[i-1][j]==1){
bj=0;
}
if(a[i+1][j]==1){
bj=0;
}
if(a[i][j+1]==1){
bj=0;
}
if(a[i][j-1]==1){
bj=0;
}
}
if(bj==1){
s++;
}
}
}
cout<<s;
return 0;
}
第5题 01矩阵
输入2个整数N和M,输出N行M列的的01数字矩阵。第1行第1个数是’1’,后面的数都和其左边或上面数相反(0和1称为相反)。例如:N=4,M=5时:
10101
01010
10101
01010
输入格式
第一行2个正整数:N和M,范围在[1,20]。
输出格式
N行M列的0/1相间的数字矩阵。
输入/输出例子1
输入:
3 3
输出:
101
010
101
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long s[29][29];
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++) {
if (s[i-1][1]==0) s[i][1] = 1;
else s[i][1] = 0;
for (int j=2;j<=m;j++) {
if (s[i][j-1]==0) s[i][j] = 1;
else s[i][j] = 0;
}
}
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++)
cout<<s[i][j];
cout<<endl;
}
return 0;
}
第6题 成绩
已知班上所有同学的成绩,但太多数字了,老师看着这么多的成绩发呆了。会编程的你自告奋勇的担起了这个任务。你需要实现计算每位同学总分的功能,并找到全班总分最高和最低同学的最高分和最低分的科目成绩。
输入格式
第一行:两个数,学生数m及科目数n(1<=m<=200,1<=n<=10);
以下m行,每行n个数,分别为学生各科成绩(最高分为100,没有负分)。
输出格式
输出m+2行,前m行每行1个数,表示学生的总成绩。
第m+1行是总分最高同学的最高分和最低分科目的成绩。
第m+2行是总分最低同学的最高分和最低分科目的成绩。
(保证只有一个最高分和最低分,且只有一个科目分数最高和最低)
输入/输出例子1
输入:
3 5
83 81 79 85 91
84 86 87 88 86
87 82 90 80 84
输出:
419
431
423
88 84
91 79
#include <bits/stdc++.h>
using namespace std;
const int N=1e5;
long long m,n,a[205][15];
long long minn=N,maxx,x,y,max_x,minx=N,maxy,miny=N;
long long sum[205],ans;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
sum[i] += a[i][j];
}
if(maxx<sum[i]) maxx = sum[i],x=i;
if(minn>sum[i]) minn = sum[i],y=i;
}
for(int i=1;i<=n;i++) cout<<sum[i]<<endl;
for(int i=1;i<=m;i++)
{
max_x=max(max_x,a[x][i]);
minx=min(minx,a[x][i]);
}
cout<<max_x<<" "<<minx<<endl;
for(int i=1;i<=m;i++)
{
maxy = max(maxy,a[y][i]);
miny = min(miny,a[y][i]);
}
cout<<maxy<<" "<<miny<<endl;
return 0;
}
第7题 最大的子方阵
输入一个m*n的矩阵(4<=m,n<=50),它是含有大小p*q的子矩阵,(2<=p,q<=m,n),请找出m*n矩阵和最大的p*q子矩阵。
如下样例所示,对于以下为4*5的矩阵:
1 2 3 4 5
5 100 3 2 1
6 7 8 9 10
10 9 8 7 6
其最大的2*3的子矩阵:
5 100 3
6 7 8
输入格式
第一行,4个整数m,n,p,q
接下来共m行,每行有n个数;
输出格式
共1行,空格隔开的三个数。分别为最大的p*q子矩阵的和,以及其子矩阵的最左上角元素的横坐标、纵坐标。
输入/输出例子1
输入:
4 5 2 3
1 2 3 4 5
5 100 3 2 1
6 7 8 9 10
10 9 8 7 6
输出:
129 2 1
#include<bits/stdc++.h>
using namespace std;
long long n,m,p,q;
long long ans,bns,maxx;
long long a[55][55];
int main(){
cin>>n>>m>>p>>q;
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
cin>>a[i][j];
}
}
for (int i=1;i<=n-p+1;i++) {
for (int j=1;j<=m-q+1;j++) {
long long s=0;
for (int x=i;x<=i+p-1;x++) {
for (int y=j;y<=j+q-1;y++) {
s += a[x][y];
}
}
if (s>maxx) maxx = s,ans = i,bns = j;
}
}
cout<<maxx<<" "<<ans<<" "<<bns;
return 0;
}
第8题 马鞍数
马鞍数是指一个n*m矩阵中,在行上最小而在列上最大的数。如矩阵n*m,其中n=4,m=5
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
则1行1列上的数就是马鞍数。答案有且只有一个。
输入:
第一行,两个数n和m(1<=n,m<=100)
以下n行,每行m个数
输出:
输出马鞍数所在的位置
样例输入:
4 5
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
样例输出:
1 1
#include<bits/stdc++.h>
using namespace std;
int n,m,a[205][205],x,y;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
{
int f=0,f2=0,maxx=0,minn=a[i][1],x=1;
for(int j=1;j<=m;j++)
if(a[i][j]<minn) minn=a[i][j],x=j;
for(int j=1;j<=n;j++)
maxx=max(maxx,a[j][x]);
if(a[i][x]==maxx)
{
cout<<i<<" "<<x;
return 0;
}
}
return 0;
}