作业(第七十五课)

二维数组应用-1 - 高手3班 - TopsCoding

1.矩阵上三角元素求和

题目描述

现在有一个m行m列的方阵,需要你求出方阵主对角线以上元素的和(不包括主对角线元素)。

输入格式

第一行输入一个正整数m,代表矩阵是m行m列。
接下来一个m阶方阵。

输出格式

输出矩阵主对角线以上元素的和。

样例

输入#1

3
1 2 3
4 5 6
7 8 9

Copy

输出#1

11

Copy

数据范围

时间限制:1s1s, 空间限制:256MB256MB

1<m,n<20

//#include<bits/stdc++.h>
//using namespace std;
//int a[25][25];
//int main()
//{
	//int i,j,n,s=0;
	//cin>>n;
	//for(i=1;i<=n;i++)
	//{
	//	for(j=1;j<=n;j++)
	//	{
	//		cin>>a[i][j];
//if(j>i)
			//{
				//s+=a[i][j];
			//}
		//}
	//}
	//cout<<s;
//}
//第一种//
#include<bits/stdc++.h>
using namespace std;
int a[25][25];
int main()
{
	int i,j,n,s=0;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			cin>>a[i][j];
			if(j>i)
			{
				s=s+a[i][j];
			}
		}
	}
	cout<<s;
}//第二种//

这是两种解法。

#2: S1855 方阵对角线2

题目描述

给你一个n*n的方阵,请你找到该方阵的副对角线的所有元素,并且求这些元素的总和

输入格式

第一行:n,1<n<40
接下来是一个n*n的方阵

输出格式

第一行:方阵的副对角线的元素,以空格间隔
第二行:所有副对角线上的元素的和

样例

输入#1

3
66 46 94
100 75 38
64 24 28

Copy

输出#1

94 75 64
233
//***wuhaotian***//
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,c=0,s=0;
	int a[50][50];
	cin>>n;
	for(int i=1;i<=n;i++)
	{
			for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
			
		}
	}s=n+1;
	for(int i=1;i<=1;i++)
	{
			for(int j=1;j<=n;j++)
		{
			s--;
			cout<<a[j][s]<<" ";
			c=c+a[j][s];
		}cout<<endl;cout<<c;
	}
}

#3: S1811 关于次对角线对称

题目描述

输入一个n行n列的二维数组,将其转换成如输出样例的图形信息,并输出

输入格式

共n+1行,第一行为一个数字n(n为奇数,且不超过99),后n行,为一个二维数组,每行n个数字(每个数字不超过9)

输出格式

原图形关于次对角线轴对称后生成的图形(输出的间隔为两个空格)

样例

输入#1

5
4 1 1 1 1
2 5 1 1 1 
2 2 5 1 1 
2 2 2 5 1
2 2 2 2 5

Copy

输出#1

5  1  1  1  1
2  5  1  1  1 
2  2  5  1  1 
2  2  2  5  1
2  2  2  2  4

Copy

数据范围


#include<bits/stdc++.h>
using namespace std;
int a[100][100],b[100][100]; 
int main(){
    int i,j,n;
    cin >> n;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cin >> a[i][j];
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            b[n+1-j][n+1-i]=a[i][j];
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cout << b[i][j]<< " "<< " "; 
        }
        cout <<endl;
    }
    return 0;
}


#4: S1812 关于对角线对称

题目描述

输入一个n行n列的二维数组,将其转换成如输出样例的图形信息,并输出

输入格式

共n+1行,第一行为一个数字n(n为奇数,且不超过99),后n行,为一个二维数组,每行n个数字(每个数字不超过9)

输出格式

原图形关于对角线轴对称后生成的图形

样例

输入#1

5
5 1 1 1 1
2 5 1 1 1 
2 2 5 1 1 
2 2 2 5 1
2 2 2 2 5

Copy

输出#1

5 2 2 2 2 
1 5 2 2 2 
1 1 5 2 2 
1 1 1 5 2
1 1 1 1 5

Copy

数据范围


#include<bits/stdc++.h>
using namespace std;
int a[100][100],b[100][100]; 
int main(){
    int i,j,n;
    cin >> n;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cin >> a[i][j];
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            b[j][i]=a[i][j];
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cout << b[i][j]<< " "; 
        }
        cout <<endl;
    }
    return 0;
}


#5: S1800 输出对角线

题目描述

输入一个数字n,输出一个n行n列的正方形。(n<10)
要求:利用二维数组存储图形的信息,再输出

输入格式

数字n

输出格式

n行n列的正方形,其中主对角线全为1,其他位置为0

样例

输入#1

5

Copy

输出#1

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

Copy

数据范围

//***wuhaotian***//
#include <bits/stdc++.h>
using namespace std;
int a[105][105];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
	{
		if(i==j)
		{
			a[i][j]=1;	
		}
			cout<<a[i][j]<<" ";
	}
		cout<<endl;
	}
}

#6: S1815 次对角线变零(一)

题目描述

输入一个n行n列的二维数组,将其转换成如输出样例的图形信息,并输出

输入格式

共n+1行,第一行为一个数字n(n为奇数,且不超过99),后n行,为一个二维数组,每行n个数字(每个数字不超过9)

输出格式

将次对角线上全部数字变成0

样例

输入#1

5
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

Copy

输出#1

1 1 1 1 0 
1 1 1 0 1
1 1 0 1 1 
1 0 1 1 1
0 1 1 1 1 

Copy

数据范围

#include<bits/stdc++.h>
using namespace std;
int a[100][100];
int main(){
    int n,i,j;
    cin >> n;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cin >> a[i][j];
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            if(i+j==n+1){
                a[i][j]=0;
            }
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            cout << a[i][j] << " ";
        }
        cout<< endl;
    }
    return 0;
}


#7: S1824 出发前抽查

题目描述

某火车站有很多辆排列整齐的火车,火车的每节车厢都装了很多货物,这些物品将要被运往世界各地。某站台有m辆火车,每辆火车有m节车厢,请你帮助工作人员进行出发前的最后一次抽查和清点工作,对于每辆火车抽查其中的某一节车厢,按照如下的规则来选取:对于第i辆火车清点第i节车厢中的货物的数量。

输入格式

第一行:整数m,1<m<20
接下来m行:m*m的矩阵,表示m辆火车的每节车厢中的货物的数量

输出格式

一行m个数字:第i辆火车的第i节车厢中的货物的数量

样例

输入#1

3
82 29 70
26 23 39
71 20 70

Copy

输出#1

82 23 70
//***wuhaotian***//
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,c=0,s=0;
	int a[50][50];
	cin>>n;
	for(int i=1;i<=n;i++)
	{
			for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
			
		}
	}s=n+1;
	for(int i=0;i<=0;i++)
	{
			for(int j=1;j<=n;j++)
		{i++;
			cout<<a[j][i] << " " ;
		}
	}
}

#8: S1825 判断题正确率

题目描述

在无纸化改卷中,对于判断题,用1表示正确,0表示错误。已知某次考试有m门课,每门课有n道判断题,每道题目的参考答案已经给出,由输入决定。现有一位同学小明,给出他每门课的选择题答案,对比参考答案求出该同学判断题的正确率,以百分比的形式输出,结果保留2位小数。

输入格式

输入为2*m+1行:
第一行为2个整数,表示考试的门数m以及每门课的判断题题数n(m≤10;n≤50);
之后的m行为每门课判断题的标准答案,每一行表示一门科目,每一题的答案之间用一个空格隔开;
最后的m行为小明每门课选择题的答案,每一行表示与参考答案科目对应的科目,每一题的答案之间用一个空格隔开。

输出格式

输出为一行,包含一个实数,为小明同学选择题的正确率,以百分比形式输出,结果保留2位小数。

样例

输入#1

4 5
1 1 1 0 0
1 0 1 0 1
1 1 1 1 0
0 0 0 1 1
1 1 1 0 1
1 0 1 1 1
1 0 1 0 0
1 0 0 1 1

Copy

输出#1

75.00%

#include <bits/stdc++.h>
using namespace std;
int a[20][60],b[20][60];
int main()
{
    int m,n,s=0;
	cin>>m>>n;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
	{
		cin>>a[i][j];
	}
	}
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
	{
		cin>>b[i][j];
			if(a[i][j]==b[i][j])
			{
			s++;	
			}
	}
	}
	cout<<fixed<<setprecision(2)<<1.0*s/(m*n)*100<<"%";
    return 0;
}

 #9: S1869 扫雷游戏

 

题目描述

扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。

输入格式

第一行是用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。
接下来n行,每行m个字符,描述了雷区中的地雷分布情况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。

输出格式

输出文件包含n行,每行m个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。

样例

输入#1

3 3
*??
???
?*?

Copy

输出#1

*10
221
1*1

Copy

输入#2

2 3
?*?
*??

Copy

输出#2

2*1
*21

Copy

数据范围

对于 100%的数据,1≤n≤100,1≤m≤100。


#include <bits/stdc++.h>
using namespace std;
char a[110][110];
int main()
{
    int m,n,s=0;
	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++)
	{
		for(int j=1;j<=m;j++)
	{
		s=0;
		if(a[i][j]=='*')
		{
			cout<<a[i][j];
		}
			else
			{
				if(a[i-1][j-1]=='*')
				{
					s++;
				}if(a[i-1][j]=='*')
				{
					s++;
				}
				if(a[i-1][j+1]=='*')
				{
					s++;
				}
				if(a[i][j-1]=='*')
				{
					s++;
				}
				if(a[i][j+1]=='*')
				{
					s++;
				}
				if(a[i+1][j-1]=='*')
				{
					s++;
				}
				if(a[i+1][j]=='*')
				{
					s++;
				}
				if(a[i+1][j+1]=='*')
				{
					s++;
				}
			cout<<s;
			}
	}
		cout<<endl;
	}
    return 0;
}

#10: S1872 孤独的‘ # ’

题目描述

在迷宫中,有几个孤独的‘#’迷失在了一堆‘*’‘∗’中,已知当一个‘#’的上下左右都是’*‘时,它是孤独的。现在输入一个n行m列的迷宫,请你找出这个迷宫中的所有孤独的‘#’。

输入格式

输入n+1行,第一行两个整数m和n,后面输入一个n行m列的矩阵,表示迷宫(m,n<100)

输出格式

输出一个数字,表示迷宫中所有孤独的‘#’的个数

样例

输入数据#1

10 10
****#****#
#**#*#**#*
**#****#**
**#*#**#*#
#**###**##
****#****#
#**#*#**#*
**#****#**
**#*#**#*#
#**###**##

Copy

输出数据#1

12
#include<bits/stdc++.h>
using namespace std;
int main()
{char a[105][105];//memset(a,'*',sizeof(a));
	int n,m,x,y,s=0;
	cin>>m>>n;
	memset(a,'*',sizeof(a));
	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++)
	{
			for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='#')
			{
				if(a[i-1][j]!='#'&&a[i][j-1]!='#'&&a[i][j+1]!='#'&&a[i+1][j]!='#')//这是四个 
				{
					s++;
				}
			}
		}	
	}//a[i-1][j-1],a[i+1][i+1],a[i-1][j+1],a[i+1][j-1]这是八个范围 
	cout<<s;
	return 0;
}//5
//10 8 4 7 2 

 #11: P1193 【入门】遥控飞机争夺赛

题目描述

红太阳杯遥控飞机大赛拉开帷幕。比赛规则为,每位选手让自己的飞机从起点到终点飞行5次,组委会记录5次的飞行的成绩之后去掉一个最大成绩、一个最小成绩后计算剩余3个成绩的平值(平均分保留3位小数)作为该选手的最终成绩。 有n名选手参加了比赛,从键盘读入每位选手的编号以及他们的5次飞行的成绩。 请根据n名选手的比赛成绩,编程计算出冠军、亚军、季军的编号以及组委会计算出的成绩。(假设不存在多名选手成绩正好一样)(4.1.51)

输入输出格式

输入

第一行为一个整数n,代表参加比赛的选手数量(n>=4 && n<=100) 后面的n行,每行有6个数,第一个数是选手的编号,后5个数为选手的5次飞行的成绩 输出

输出

3行,第一行输出冠军的编号及飞行成绩(保留3位小数)用空格隔开2个数;第二行输出亚军的编号及飞行成绩,第三行输出季军的编号及飞行成绩

输入输出样例

样例

输入1

4
11 58 59 60 61 62
18 59 60 61 62 63
23 65 64 63 62 62 
10 60 61 61 65 62

Copy

输出1

23 63.000
10 61.333
18 61.000

Copy

时间及空间限制

1s, 256MB.

#include <bits/stdc++.h>
using namespace std;
int main()
{
   int n,a[101],max_=0,min_=999999,t,sum=0;
   double b[101];
   cin>>n;
   for(int i=1;i<=n;i++)
   {
   	max_=0;
   	min_=9999999;
   	sum=0;
   	cin>>a[i];
   	for(int i=1;i<=5;i++)
   	{
   		cin>>t;
   		sum=sum+t;
   			if(t>=max_)
   			{
   				max_=t;
		    }
		   	if(t<=min_)
		   	{
		   		min_=t;	
		   	}
	   }
	   b[i]=(sum-max_-min_)/3.0;
	} 
	for(int i=1;i<n;i++)
	{
		for(int j=1+i;j<=n;j++)
		{
			if(b[j]>b[i])
			{
				swap(a[i],a[j]);	swap(b[i],b[j]);
			}
		}
	}for(int i=1;i<=3;i++){cout<<a[i]<<" "<<fixed<<setprecision(3)<<b[i]<<endl;}return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值