二维数组——基础查找输出(c++)

输出数组的第k行数
题目描述
输入一个二维数组,显示他的第k行的值。
输入
第一行 n,m两个整数,代表数组的行,列(m<100,n<100)
n行,每行m个整数
一个整数k
输出
第k行所有的数据 用空格隔开
样例
输入复制
4 4
2 6 5 9
1 3 7 8
5 3 5 5
1 7 1 2
2
输出复制
1 3 7 8
#include <iostream>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	
	
	cin>>n>>m;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	int k;
	cin>>k;
	k = k-1;
	
	
	for(int i = 0;i<n;i++)
	{
		cout<<a[k][i]<<" ";
	}
	return 0;
}

输出数组的第k列数
题目描述
输入一个二维数组,显示他的第k列的值。
输入
第一行 n,m两个整数,代表数组的行,列(m<100,n<100)
n行,每行m个整数
一个整数k
输出
第k列所有的数据 用空格隔开
样例
输入复制
4 4
2 6 5 9
1 3 7 8
5 3 5 5
1 7 1 2
2
输出复制
6 3 3 7
#include <iostream>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	
	
	cin>>n>>m;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	int k;
	cin>>k;
	k = k-1;
	
	
	for(int i = 0;i<m;i++)
	{
		cout<<a[i][k]<<" ";
	}
	return 0;
}

输出数组的每一行的和
题目描述
输入一个二维数组,显示他的每一行的和
输入
第一行 n,m两个整数,代表数组的行,列(m<100,n<100)
n行,每行m个整数
输出
一行数据,用空格隔开,表示数组每一行的和
样例
输入复制
4 4
2 6 5 9
1 3 7 8
5 3 5 5
1 7 1 2
输出复制
22 19 18 11
#include <iostream>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	
	
	cin>>n>>m;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<n;i++)
	{
		int sum = 0;
		for(int j = 0;j<m;j++)
		{
			sum = sum+a[i][j];
		}
		cout<<sum<<" ";
	}
	return 0;
}

输出数组的每列的平均值
题目描述
输入一个二维数组,显示他的每一列的平均值
输入
第一行 n,m两个整数,代表数组的行,列(m<100,n<100)
n行,每行m个整数
输出
一行数据,用空格隔开,表示数组每列行的平均值(保留整数部分)
样例
输入复制
4 4
2 6 5 9
1 3 7 8
5 3 5 5
1 7 1 2
输出复制
2 4 4 6
#include <iostream>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	
	
	cin>>n>>m;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<m;i++)
	{
		int sum = 0;
		for(int j = 0;j<n;j++)
		{
			sum = sum+a[j][i];
		}
		cout<<sum/m<<" ";
	}
	return 0;
}

最小战损
题目描述
n个战术小队,分别进行了m场战斗模拟,每场战斗都会记录战损
请你求出每个小队m场战斗中的最小战损,以及他是第几场战斗
输入
两个整数,n代表有n个战术小队,m代表他们进行了m战斗模拟
n行数据,每一行代表第i个战队的战损记录
输出
n行,每行两个整数,第一个代表n个战队的最小战损,第2个代表第几场战斗
样例
输入复制
3 6
22 31 21 25 19 20
31 23 25 29 41 30
25 25 22 21 31 28
输出复制
19 5
23 2
21 4
#include <iostream>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	
	
	cin>>n>>m;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<n;i++)
	{
		int min = INT_MAX;
		int mini;
		for(int j = 0;j<m;j++)
		{
			if(a[i][j]<min)
			{
				min = a[i][j];
				mini = j;
			}
		}
		cout<<min<<" "<<mini+1<<endl;
		
	}
	return 0;
}

最高成绩
题目描述
期末考试结束后,班主任想知道(语文、数学、英语)每一科目最高成绩是多少,
以及他是第几个同学
输入
n代表班级里的学生数量
n行,每行三个数,分别代表每个同学的语文、数学、英语成绩
输出
3行,代表班级语文、数学、英语成绩最高得分
样例
输入复制
5
70 80 92
90 99 86
99 85 91
96 96 87
83 87 90
输出复制
99 3
99 2
92 1
#include <iostream>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	
	
	m = 3;
	cin>>n;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<m;i++)
	{
		int max = INT_MIN;
		int maxi;
		for(int j = 0;j<n;j++)
		{
			if(a[j][i]>max)
			{
				max = a[j][i];
				maxi = j;
			}
		}
		cout<<max<<" "<<maxi+1<<endl;
		
	}
	return 0;
}

郭远摘苹果
题目描述
郭远有一天走到了一片苹果林,里面每颗树上都结有不同数目的苹果,
郭远身上只能拿同一棵树上的苹果,他每到一棵果树前都会把自己身
上的苹果扔掉并摘下他所在树上的苹果并带走(假设郭远会走过每一
棵苹果树),问在郭远摘苹果的整个过程中,他身上携带的最多苹果
数与最小苹果数的差是多少?
输入
m,n(即苹果林中有果树的行数和列数,0<n,m<=10) m行n列数
据(即每颗树上的苹果数)
输出
1个数字(郭远摘苹果的整个过程中,他身上携带的最多苹果数与最小
苹果数的差)
样例
输入复制
4 3
2 6 5
1 3 7
5 3 5
1 7 12
输出复制
11
#include <iostream>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	int max,min;
	max = INT_MIN;
	min = INT_MAX;
	
	
	cin>>n>>m;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]>max)
			{
				max = a[i][j];
			}
			else if(a[i][j]<min)
			{
				min = a[i][j];
			}
		}
	}
	
	
	cout<<max-min;
	
	return 0;
}

各个科目成绩的平均分
题目描述
请从键盘读入一个整数n(n<=100),代表一个班级同学的人数, 然后读入n个人的语文、数学、英语成绩;请求出这n个人的语文、 数学、英语三科成绩的平均分分别是多少,结果保留1位小数。
输入
第一行:一个整数n,代表班级的人数!
第2行~第n+1行,输入n个同学的语文、数学、英语成绩,每行输
入一个同学的成绩,成绩用空格隔开!
输出
输出每个人三科的平均成绩,分别用空格隔开,平均成 绩保留1位小数!
样例
输入复制
2
100 99 98
99 98 97
输出复制
99.0 98.0
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	
	
	m = 3;
	cin>>n;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<n;i++)
	{
		float sum = 0;
		for(int j = 0;j<m;j++)
		{
			sum = sum+a[i][j];
		}
		cout<<fixed<<setprecision(1)<<sum/3<<" ";
	}
	
	
	return 0;
}

求最大梯形的面积
题目描述
从键盘读入n(3<=n<=100)个梯形的上底、下底和高,请问这n个梯形中,
最大面积的梯形的面积是多少?(梯形面积的求解公式为 S = (a + b) *
h / 2,也就是(上底 + 下底) * 高 / 2)
(5.1.18)
输入
第1行为1个整数n,接下来n行每行3个整数分别代表梯形的上底、下底
和高。
输出
最大面积梯形的面积(结果保留1位小数)
样例
输入复制
3
1 2 3
3 4 5
2 3 4
输出复制
17.5
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	float max = -99999;
	
	
	m = 3;
	cin>>n;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<n;i++)
	{
		float sum = (a[i][0]+a[i][1])*a[i][2]*1.0/2;
		if(sum>max)
		{
			max = sum;
		}
	}
	
	
	cout<<fixed<<setprecision(1)<<max;
	
	
	return 0;
}

奇偶统计
题目描述
在一个n行m列的二维数组中,有若干奇数和偶数,请编程统计出这个二维数组中,奇数和偶数分别 有多少个?
输入
第一行是两个整数n和m(n和m都是4~100之间的整数),代表接下来的二维数组有n行m列。
接下来n行,每行有m个整数。(这些整数都是0~9999之间的整数)
输出
两个整数用空格隔开,分别代表二维数组中奇数、偶数的个数
样例
输入复制
2 2
2 3
4 6
输出复制
1 3
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	int cntj = 0;
	int cnto = 0;
	
	
	cin>>n>>m;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]%2==0)
			{
				cnto++;
			}
			else
			{
				cntj++;
			}
		}
	}
	
	
	cout<<cntj<<" "<<cnto;
	
	
	return 0;
}

找回文数
题目描述
James同学发现了在二维数组中有一些回文数,请编程找出这些回文数,并按照输入的顺序输出。 (回
文数指的是这个数正过来读和反过来读是同一个数的数,比如1、8、99、252、1221等)。
输入
第一行是两个整数n和m(n和m都是4~100之间的整数),代表接下来的二维数组有n行m列。
接下来n行,每行有m个整数,这些整数都是1~9999之间的整数。
输出
按照输入的顺序输出满足条件的回文数,每行1个。
样例
输入复制
3 3
1 22 98
34 121 110
100 210 323
输出复制
1
22
121
323
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	
	
	cin>>n>>m;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			int q = a[i][j];
			int cnt = 0;
			int sum = 0;
			
			while(q!=0)
        	{
        		int a = q%10;
        		sum = sum*10+a;
        		q = q/10;
        		cnt++;
        	}
 			if(sum==a[i][j])
			{
				cout<<a[i][j]<<endl;
			}
		}
	}
	
	return 0;
}

石头剪刀布
题目描述
石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出
拳一样,则不分胜负。一天,小a和小b正好在玩石头剪刀布,假设1代表石头,2代
表剪刀,3代表布。小a和小b一共玩了n轮,请问最后的比赛结果是小a赢了还是小b
赢了,还是平局?
注意:最终输赢按照小a和小b赢的总次数计算。例如:共比赛7局,小a赢了4局,
小b赢了3局,那么输出“a win”。
输入
第一行,是一个整数n(n<=100)
接下来n行,每行有2个数,分别代表每轮比赛中小a和小b的出拳。
输出
如果小a赢了,输出字符串“a win”,如果小b赢了,输出字符串“b win”,如果
平局则输出字符串“tie”。(请注意:输出的字符串全部是小写)
样例
输入复制
3
1 2
2 3
1 1
输出复制
a win
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	int cnta = 0;
	int cntb = 0;
	
	
	m = 2;
	cin>>n;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<n;i++)
	{
		if((a[i][0]==1&&a[i][1]==2)||(a[i][0]==2&&a[i][1]==3)||(a[i][0]==3&&a[i][1]==1))
		{
			cnta++;
		}
		else if((a[i][0]==2&&a[i][1]==1)||(a[i][0]==3&&a[i][1]==2)||(a[i][0]==1&&a[i][1]==3))
		{
			cntb++;
		}
	}
	
	
	if(cnta>cntb)
	{
		cout<<"a win";
	}
	else if(cntb>cnta)
	{
		cout<<"b win";
	}
	else
	{
		cout<<"tie";
	}
	
	return 0;
}

计算鞍点
描述
给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。
鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
输入
输入包含一个5行5列的矩阵
输出
如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	m = 5;
	n = 5;
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			bool f =true;
			for(int k = 0;k<n;k++)
			{
				if(a[i][j]>a[k][j])
				{
					f = false;
					break;
				}
			}
			for(int h = 0;h<m;h++)
			{
				
				if(f==false)
				{
					break;
				}
				if(a[i][j]<a[i][h])
				{
					f = false;
					break;
				}
			}
			if(f==true)
			{
				cout<<i+1<<" "<<j+1<<" "<<a[i][j];
				return 0;
			}
		}
	}
	
	
	cout<<"no found";
	
	
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值