站酷网址是什么,徐州最新通知今天,泉州快速建站模板,小手工在家做7-1 矩阵运算
给定一个nn的方阵#xff0c;本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入格式:
输入第一行给出正整数n#xff08;1n≤10#xff09;#xff1b;随后n行#xff0c;每行给出…7-1 矩阵运算
给定一个n×n的方阵本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入格式:
输入第一行给出正整数n1n≤10随后n行每行给出n个整数其间以空格分隔。
输出格式:
在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
输入样例:
4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1输出样例:
35
#includebits/stdc.h
using namespace std;
int main(){int n,i,j,a[15][15],s0;cinn;for(i1;in;i){for(j1;jn;j)cina[i][j];}for(i1;in;i){for(j1;jn;j)if(ij!n1)sa[i][j];}couts;
return 0;
} 7-2 方阵循环右移
本题要求编写程序将给定n×n方阵中的每个元素循环向右移m个位置即将第0、1、⋯、n−1列变换为第n−m、n−m1、⋯、n−1、0、1、⋯、n−m−1列。
输入格式
输入第一行给出两个正整数m和n1≤n≤6。接下来一共n行每行n个整数表示一个n阶的方阵。
输出格式
按照输入格式输出移动后的方阵即输出n行每行n个整数每个整数后输出一个空格。
输入样例
2 3
1 2 3
4 5 6
7 8 9输出样例
2 3 1
5 6 4
8 9 7
#includebits/stdc.h
using namespace std;
int main(){int m,n,i,j,a[10][10];cinmn;mm%n;for(i1;in;i){for(j1;jn;j)cina[i][j];}for(i1;in;i){for(jn-m1;jn;j)couta[i][j] ;for(j1;jn-m;j)couta[i][j] ;coutendl;}return 0;
} 7-3 判断上三角矩阵
上三角矩阵指主对角线以下的元素都为0的矩阵主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序判断一个给定的方阵是否上三角矩阵。
输入格式
输入第一行给出一个正整数T为待测矩阵的个数。接下来给出T个矩阵的信息每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行每行给出n个整数其间以空格分隔。
输出格式
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵输出“YES”否则输出“NO”。
输入样例
3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6
输出样例
YES
NO
NO#includebits/stdc.h
using namespace std;
int main(){int t,n,i,j;cint;while(t--){cinn;int a[15][15],x0;for(i1;in;i){for(j1;jn;j){cina[i][j];if(ija[i][j]!0)x1;}}if(x)coutNO\n;else coutYES\n;}
return 0;
} 7-4 求矩阵各行元素之和
本题要求编写程序求一个给定的m×n矩阵各行元素之和。
输入格式
输入第一行给出两个正整数m和n1≤m,n≤6。随后m行每行给出n个整数其间
以空格分隔。
输出格式
每行输出对应矩阵行元素之和。
输入样例
3 2
6 3
1 -8
3 12输出样例
9
-7
15
#includebits/stdc.h
using namespace std;
int main(){int m,n,i,j,a[10][10];cinmn;for(i1;im;i){int s0;for(j1;jn;j){cina[i][j];sa[i][j];}coutsendl;}
return 0;
} 7-5 找鞍点
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序求一个给定的n阶方阵的鞍点。
输入格式
输入第一行给出一个正整数n1≤n≤6。随后n行每行给出n个整数其间以空格分隔。
输出格式
输出在一行中按照“行下标 列下标”下标从0开始的格式输出鞍点的位置。如果鞍点不存在则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。
输入样例1
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9输出样例1
2 1输入样例2
2
1 7
4 1输出样例2
NONE
#includebits/stdc.h
using namespace std;
int main(){int n,i,j,k,a[10][10],y0;cinn;for(i0;in;i){for(j0;jn;j)cina[i][j];}for(i0;in;i){int maxa[i][0];for(j0;jn;j){if(a[i][j]max){maxa[i][j];kj;}}int minmax;for(int x0;xn;x){if(a[x][k]min){mina[x][k];}}if(maxmin){couti k;y1;break;}}
if(y0)coutNONE;
return 0;
} 7-6 求矩阵的局部极大值
给定M行N列的整数矩阵A如果A的非边界元素A[i][j]大于相邻的上下左右4个元素那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。
输入格式
输入在第一行中给出矩阵A的行数M和列数N3≤M,N≤20最后M行每行给出A在该行的N个元素的值。数字间以空格分隔。
输出格式
每行按照“元素值 行号 列号”的格式输出一个局部极大值其中行、列编号从1开始。要求按照行号递增输出若同行有超过1个局部极大值则该行按列号递增输出。若没有局部极大值则输出“None 总行数 总列数”。
输入样例1
4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1输出样例1
9 2 3
5 3 2
5 3 4输入样例2
3 5
1 1 1 1 1
9 3 9 9 1
1 5 3 5 1输出样例2
None 3 5
#includebits/stdc.h
using namespace std;
int main(){int m,n,i,j,x0,a[25][25];cinmn;for(i1;im;i){for(j1;jn;j){cina[i][j];}}for(i2;im;i){for(j2;jn;j){
if(a[i][j]a[i-1][j]a[i][j]a[i1][j]a[i][j]a[i][j-1]a[i][j]a[i][j1])
{couta[i][j] i jendl;x1;}}}if(x0)coutNone m n;
return 0;
} 7-7 打印杨辉三角
本题要求按照规定格式打印前N行杨辉三角。
输入格式
输入在一行中给出N1≤N≤10。
输出格式
以正三角形的格式输出前N行杨辉三角。每个数字占固定4位。
输入样例
6输出样例 11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1
#includebits/stdc.h
using namespace std;
int main(){int n,i,j,a[15][15]{0};cinn;for(i1;in;i){for(j1;jn;j){if(ij||j1)a[i][j]1;else a[i][j]a[i-1][j-1]a[i-1][j];}}for(i1;in;i){for(j1;jn-i;j)cout ;for(j1;jn;j){if(a[i][j])printf(%4d,a[i][j]);}coutendl;}
return 0;
} 7-8 螺旋方阵
所谓“螺旋方阵”是指对任意给定的N将1到N×N的数字从左上角第1个格子开始按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
输入格式
输入在一行中给出一个正整数N10。
输出格式
输出N×N的螺旋方阵。每行N个数字每个数字占3位。
输入样例
5输出样例 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9 7-9 简易连连看
本题要求实现一个简易连连看游戏模拟程序。
给定一个2N×2N的方阵网格游戏盘面每个格子中放置一些符号。这些符号一定是成对出现的同一个符号可能不止一对。程序读入玩家给出的一对位置(x1,y1)、(x2,y2)判断这两个位置上的符号是否匹配。如果匹配成功则将两个符号消为“*”并输出消去后的盘面否则输出“Uh-oh”。若匹配错误达到3次则输出“Game Over”并结束游戏。或者当全部符号匹配成功则输出“Congratulations!”然后结束游戏。
输入格式
输入在一行中给一个正整数N5。随后2N行每行2N个大写英文字母其间以1个空格分隔表示游戏盘面。盘面之后给出一个正整数K随后K行每行按照格式“x1 y1 x2 y2”给出一个玩家的输入。注意格子的行、列编号是从1到2N。
输出格式
根据玩家的每一步输入输出相应的结果。输出盘面时注意每行字符间以1个空格分隔行末不得有多余空格。
输入样例1
2
I T I T
Y T I A
T A T Y
I K K T
11
1 1 1 3
4 2 4 3
3 1 4 2
2 2 1 2
3 1 2 4
4 4 3 1
2 1 3 4
3 3 1 4
4 1 2 3
2 4 3 2
1 1 2 2输出样例1
* T * T
Y T I A
T A T Y
I K K T
* T * T
Y T I A
T A T Y
I * * T
Uh-oh
* * * T
Y * I A
T A T Y
I * * T
Uh-oh
* * * T
Y * I A
* A T Y
I * * *
* * * T
* * I A
* A T *
I * * *
* * * *
* * I A
* A * *
I * * *
* * * *
* * * A
* A * *
* * * *
Congratulations!输入样例2
2
I T I T
Y T I A
T A T Y
I K K T
5
1 1 4 4
1 1 2 3
1 1 2 3
2 2 4 1
2 2 3 3输出样例2
Uh-oh
* T I T
Y T * A
T A T Y
I K K T
Uh-oh
Uh-oh
Game Over
#includebits/stdc.h
using namespace std;
int main(){int n,i,j,k,x1,y1,x2,y2,s0,m0;char a[10][10];cinn;getchar();for(i1;i2*n;i){for(j1;j2*n;j)cina[i][j];}cink;while(k--){cinx1y1x2y2;if(a[x1][y1]a[x2][y2]a[x1][y1]!*){m;if(m2*n*n){coutCongratulations!;break;}a[x1][y1]a[x2][y2]*;for(i1;i2*n;i){for(j1;j2*n;j){if(j!1)cout ;couta[i][j];}coutendl;}}else {coutUh-oh\n;s;}if(s3){coutGame Over;break;}}return 0;
} 7-10 矩阵A乘以B
给定两个矩阵A和B要求你计算它们的乘积矩阵AB。需要注意的是只有规模匹配的矩阵才可以相乘。即若A有Ra行、Ca列B有Rb行、Cb列则只有Ca与Rb相等时两个矩阵才能相乘。
输入格式
输入先后给出两个矩阵A和B。对于每个矩阵首先在一行中给出其行数R和列数C随后R行每行给出C个整数以1个空格分隔且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数并且所有整数的绝对值不超过100。
输出格式
若输入的两个矩阵的规模是匹配的则按照输入的格式输出乘积矩阵AB否则输出Error: Ca ! Rb其中Ca是A的列数Rb是B的行数。
输入样例1
2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8输出样例1
2 4
20 22 24 16
53 58 63 28输入样例2
3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72输出样例2
Error: 2 ! 3 #includebits/stdc.h
using namespace std;
int main(){int a,b,c,d,i,j,x[105][105],y[105][105];cinab;for(i0;ia;i){for(j0;jb;j)cinx[i][j];}cincd;for(i0;ic;i){for(j0;jd;j)ciny[i][j];}if(b!c)coutError: b ! c;else {couta dendl;for(i0;ia;i){for(j0;jd;j){int s0;if(j)cout ;for(int k0;kb;k)sx[i][k]*y[k][j];couts;}coutendl;}}
return 0;
} 7-11 矩阵转置
从键盘输入一个m(2m6)*n(2n6)阶的矩阵编程输出它的转置矩阵。
输入格式:
在第一行输入矩阵的行数m和列数n的值在第二行按照矩阵格式输入矩阵的数据同行数据之间用空格隔开。
输出格式:
矩阵格式输出同行数据之间用一个空格隔开。
输入样例:
3 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5输出样例:
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
#includebits/stdc.h
using namespace std;
int main(){int m,n,i,j,a[10][10];cinmn;for(i1;im;i){for(j1;jn;j)cina[i][j];}for(j1;jn;j){for(i1;im;i){if(i!1)cout ;couta[i][j];}coutendl;}
return 0;
} 7-12 刮刮彩票
“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示 每次游戏玩家会拿到一张彩票上面会有 9 个数字分别为数字 1 到数字 9数字各不重复并以 3×3 的“九宫格”形式排布在彩票上。
在游戏开始时能看见一个位置上的数字其他位置上的数字均不可见。你可以选择三个位置的数字刮开这样玩家就能看见四个位置上的数字了。最后玩家再从 3 横、3 竖、2 斜共 8 个方向中挑选一个方向方向上三个数字的和可根据下列表格进行兑奖获得对应数额的金币。
数字合计获得金币数字合计获得金币610,0001672736171808720181199360193610802030611252211,08012108221441372231,8001454243,60015180
现在请你写出一个模拟程序模拟玩家的游戏过程。
输入格式:
输入第一部分给出一张合法的彩票即用 3 行 3 列给出 0 至 9 的数字。0 表示的是这个位置上的数字初始时就能看见了而不是彩票上的数字为 0。
第二部给出玩家刮开的三个位置分为三行每行按格式 x y 给出玩家刮开的位置的行号和列号题目中定义左上角的位置为第 1 行、第 1 列。。数据保证玩家不会重复刮开已刮开的数字。
最后一部分给出玩家选择的方向即一个整数 1 至 3 表示选择横向的第一行、第二行、第三行4 至 6 表示纵向的第一列、第二列、第三列7、8分别表示左上到右下的主对角线和右上到左下的副对角线。
输出格式:
对于每一个刮开的操作在一行中输出玩家能看到的数字。最后对于选择的方向在一行中输出玩家获得的金币数量。
输入样例:
1 2 3
4 5 6
7 8 0
1 1
2 2
2 3
7输出样例:
1
5
6
180
#includebits/stdc.h
using namespace std;
int main(){int i,j,a[5][5],x,y,z,s0,c[10]{0},d;int b[30]{0,0,0,0,0,0,10000,36,720,360,80,252,108,72,54,180,72,180,119,36,306,1080,144,1800,3600};for(i1;i3;i){for(j1;j3;j){cina[i][j];c[a[i][j]]1;}}for(i1;i9;i)if(c[i]0) di;for(i1;i3;i){for(j1;j3;j){if(a[i][j]0){a[i][j]d;}}}for(i1;i3;i){cinxy;couta[x][y]endl;}cinz;if(z1)for(j1;j3;j)sa[1][j];if(z2)for(j1;j3;j)sa[2][j];if(z3)for(j1;j3;j)sa[3][j];if(z4)for(j1;j3;j)sa[j][1];if(z5)for(j1;j3;j)sa[j][2];if(z6)for(j1;j3;j)sa[j][3];if(z7)for(j1;j3;j)sa[j][j];if(z8) sa[1][3]a[2][2]a[3][1];coutb[s];
return 0;
} 7-13 数雷
扫雷游戏玩过吗没玩过的请参考下图。 点开一个格子的时候如果这一格没有雷那它上面显示的数字就是周围8个格子忽略游戏区域外的格子的地雷数目。给你一个矩形区域表示的雷区请数一数各个无雷格子周围上下左右左上右上左下右下等8个方向有几个雷。
输入格式:
首先输入一个正整数T表示测试数据的组数然后是T组测试数据。对于每组测试第一行输入2个整数xy1≤ xy ≤15接下来输入x行每行y个字符用于表示地雷的分布其中*表示地雷.表示该处无雷。
输出格式:
对于每组测试输出一个x行y列的矩形其中有地雷的格子显示*没地雷的格子显示其周围8个格子中的地雷总数。任意两组测试之间留一个空行。
输入样例:
2
3 3
**.
..*
.*.
2 4
*..*
*...输出样例:
**2
34*
1*2*21*
*211 #includebits/stdc.h
using namespace std;
int main(){int t;cint;while(t--){int x,y,i,j;char a[20][20]{ };cinxy;for(i1;ix;i){for(j1;jy;j)cina[i][j];}for(i1;ix;i){for(j1;jy;j){int s0;if(a[i][j].){if(a[i-1][j]*)s;if(a[i][j-1]*)s;if(a[i1][j]*)s;if(a[i][j1]*)s;if(a[i-1][j-1]*)s;if(a[i1][j1]*)s;if(a[i-1][j1]*)s;if(a[i1][j-1]*)s;couts;}else couta[i][j];}coutendl;}if(t!0)coutendl;}
return 0;
}
7-14 最矮的巨人
操场上有N x N个“巨人”按N行N列的矩阵形式列队请编程找出该方阵中所有“最矮的巨人”。 所谓“最矮的巨人”是指该巨人在其所在行中身高最高没人比其更高且在其所在列中身高最矮没人比其更矮。
输入格式:
输入的第1行给出一个正整数n ( 1 ≤ n ≤ 6 )表示方阵的行列数。随后n行每行给出n个整数代表巨人的身高其间以空格作分隔。
输出格式:
如果找到至少一个“最矮巨人”输出如下 (第1个最矮巨人所在行下标第1个最矮巨人所在列下标) (第2个最矮巨人所在行下标第2个最矮巨人所在列下标) ... (第n个最矮巨人所在行下标第n个最矮巨人所在列下标)
如果没有找到“最矮巨人”输出如下 NONE
注意即便输出结果只有一行也要输出换行符。行列下标均从0开始计数。
输入样例:
4
1 7 4 6
4 6 3 6
1 6 1 6
0 7 8 7输出样例:
(1,1)
(1,3)
(2,1)
(2,3) 7-15 机工士姆斯塔迪奥
在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。
你需要处理这个副本其中的一个机制N×M 大小的地图被拆分为了 N×M 个 1×1 的格子BOSS 会选择若干行或/及若干列释放技能玩家不能站在释放技能的方格上否则就会被击中而失败。
给定 BOSS 所有释放技能的行或列信息请你计算出最后有多少个格子是安全的。
输入格式:
输入第一行是三个整数 N,M,Q (1≤N×M≤1050≤Q≤1000)表示地图为 N 行 M 列大小以及选择的行/列数量。
接下来 Q 行每行两个数 Ti,Ci其中 Ti0 表示 BOSS 选择的是一整行Ti1 表示选择的是一整列Ci 为选择的行号/列号。行和列的编号均从 1 开始。
输出格式:
输出一个数表示安全格子的数量。
输入样例:
5 5 3
0 2
0 4
1 3输出样例:
12
#includebits/stdc.h
using namespace std;
int main(){int n,m,q,x,y,i,j;cinnmq;int a[n5][m5],b0;for(i1;in;i){for(j1;jm;j)a[i][j]0;}while(q--){cinxy;if(x0){for(j1;jm;j)a[y][j]1;}else {for(i1;in;i)a[i][y]1;}}for(i1;in;i){for(j1;jm;j)if(a[i][j]0)b;}coutb;return 0;
} #includebits/stdc.h
using namespace std;
int main(){int n,m,q,i,j,x,y,s10,s20;mapint,intb[2];b[2][100005]{0};cinnmq;while(q--){cinxy;if(b[x][y]0){if(x0)s1;else s2;b[x][y]1;}}coutn*m-(s1*ms2*n-s1*s2);
return 0;
}