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;
}