对角线之和
题目描述
输入一个矩阵,输出右上-左下对角线上的数字和
输入
输入1个整数N。(N<10)表示矩阵有n行n列
输出
对角线的和
样例
输入复制
4
1 2 3 4
2 3 4 5
4 5 6 7
1 2 3 4
输出复制
14
#include<iostream>
using namespace std;
int main()
{
int n,cnt=0;
cin>>n;
int a[100][100];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
int sum=0;
for(int i=0;i<n;i++){
sum=a[i][cnt]+sum;
cnt++;
}
cout<<sum;
}
右转90度
题目描述
输入一个矩阵,输出他右转90度后的结果
输入
输入1个整数N。(N<10)表示矩阵有n行n列
输入n行,代表矩阵内的数据
输出
右转90度后的结果
样例
输入复制
3
1 2 3
4 5 6
7 8 9
输出复制
7 4 1
8 5 2
9 6 3
#include<iostream>
using namespace std;
int main()
{
int a[100][100];
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=n;j>=n;j--){
cout<<a[j][i]<<"\t";
}
cout<<endl;
}
}
矩阵交换行
描述
给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素
排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。
输入
输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格分开。
第6行包含两个整数m、n,以一个空格分开。(1 <= m,n <= 5)
输出
输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。
#include<iostream>
using namespace std;
int main()
{
int n,m,a[100][100];
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cin>>a[i][j];
}
}
cin>>n>>m;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(j==n){
cout<<a[i][n]<<" ";
}
else if(j==m){
cout<<a[i][m]<<" ";
}
else{
cout<<a[i][j]<<" ";
}
}
cout<<endl;
}
}
数字走向
题目描述
输入整数N,输出相应方阵。
输入
一个整数N。( 0 < n < 10 )
输出
一个方阵,每个数字的场宽为3。
样例
输入复制
5
输出复制
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
10 9 8 7 6
5 4 3 2 1
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[20][20];
int num=1;
int i=5,j=5;
while(i>=1&&j>=1){
a[i][j]=num++;
j--;
if(j<1){
j=5;
i--;
}
}
for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
cout<<setw(3)<<a[i][j];
}
cout<<endl;
}
}
斜角I
题目描述
输入整数N,输出相应方阵。
输入
一个整数N。( 0 < n < 10 )
输出
一个方阵,每个数字的场宽为3。
样例
输入复制
5
输出复制
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
#include<iostream>
using namespace std;
int x[]={0,1,0,-1};
int y[]={1,0,-1,0};
int k=1,num=1,i=1,j=1,n,m,tx,ty;
int a[100][100]={0};
int main()
{
cin>>n>>m;
while(num<=n*m){
if(i>=1&&i<=n&&j>=1&&j<=m){
a[i][j]=num;
}
i++;
j--;
if(j<1){
i=1;
k++;
j=k;
num++;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
}
蛇形遍历
用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。
蛇形填充方法为:
对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各
条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。
比如n=4时,方阵填充为如下形式
输入
输入一个不大于10的正整数n,表示方阵的行数。
输出
输出该方阵,相邻两个元素之间用单个空格间隔。
#include<iostream>
using namespace std;
int x[]={0,1,0,-1};
int y[]={1,0,-1,0};
int k=1,num=1,i=1,j=1,n,m,tx,ty;
int a[100][100]={0};
int main()
{
cin>>n>>m;
while(num<=n*m){
if(i>=1&&i<=n&&j>=1&&j<=m){
a[i][j]=num;
num++;
}
i++;
j--;
if(j<1){
i=1;
k++;
j=k;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
}
回形遍历
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个
数组。如图所示:
输入
输入的第一行上有两个整数,依次为row和col
。
余下有row行,每行包含col个整数,构成一个
二维整数数组。
(注:输入的row和col保证0 < row < 100, 0
< col < 100)
输出
按遍历顺序输出每个整数。每个整数占一行。
输入复制
3 3
1 2 3
8 9 4
7 6 5
输出复制
1
2
3
4
5
6
7
8
9
#include<iostream>
using namespace std;
int x[]={0,1,0,-1};
int y[]={1,0,-1,0};
int k=0,num=1,i=1,j=1,n,m,tx,ty;
int a[100][100]={0};
int main()
{
cin>>n>>m;
while(num<=n*m){
a[i][j]=num;
num++;
tx=i+x[k];
ty=j+y[k];
if(a[tx][ty]==0&&tx>=1&&tx<=n&&ty>=1&&ty<=m)
i=tx,j=ty;
else
k++;
if(k>3)
k=0;
i=i+x[k];
j=j+y[k];
}
for(i=0;i<=n;i++){
for(j=0;j<=m;j++){
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
}
用while循环输入句子:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[20][20];
int num=1;
int i=5,j=5;
while(i>=1&&j>=1){
a[i][j]=num++;
j--;
if(j<1){
j=5;
i--;
}
}
for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
cout<<setw(3)<<a[i][j];
}
cout<<endl;
}
}
左右翻转:
#include<iostream>
using namespace std;
int main()
{
int a[50][50];
int num=1;
int n=5,m=5;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
a[i][j]=num;
num++;
}
}
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
cout<<"左右翻转"<<endl;
for(int i=1;i<=5;i++){
for(int j=5;j>=1;j--){
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
return 0;
}
上下翻转:
#include<iostream>
using namespace std;
int main()
{
int a[50][50];
int num=1;
int n=5,m=5;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
a[i][j]=num;
num++;
}
}
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
cout<<"上下翻转"<<endl;
for(int i=5;i>=1;i--){
for(int j=1;j<=5;j++){
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
return 0;
}
行列互换:
#include<iostream>
using namespace std;
int main()
{
int a[50][50];
int num=1;
int n=5,m=5;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
a[i][j]=num;
num++;
}
}
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
cout<<"行列互换"<<endl;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cout<<a[j][i]<<"\t";
}
cout<<endl;
}
return 0;
}