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 s;
	cin>>s;
	s--;
	for(int i=0;i<m;i++)
	{
		cout<<a[s][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 s;
	cin>>s;
	s--;
	for(int i=0;i<n;i++)
	{
		cout<<a[i][s]<<" ";
	}
	
	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++)
	{
		float sum=0;
		for(int j=0;j<n;j++)
		{
			sum=sum+a[j][i];
		}
		sum=1.0*sum/n;
		cout<<sum<<" ";
	}
	
	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=999;
		int mini=999;
		for(int j=0;j<m;j++)
		{
			if(min>a[i][j])
			{
				min=a[i][j];
				mini=j+1;
			}
		}
		cout<<min<<" "<<mini<<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;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<3;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=0;i<3;i++)
	{
		int max=-1;
		int maxi=-1;
		for(int j=0;j<n;j++)
		{
			if(max<a[j][i])
			{
				max=a[j][i];
				maxi=j+1;
			}
		}
		cout<<max<<" "<<maxi<<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;
	cin>>n>>m;
	int max=-1;
	int min=99999;
	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];
			}
			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

98 99 97

输出复制

99 98

#include<iostream>
using namespace std;
int main()
{
	int a[110][110];
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<3;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=0;i<n;i++)
	{
		float sum=0;
		for(int j=0;j<3;j++)
		{
			sum=sum+a[i][j];
		}
		sum=1.0*sum/3;
		cout<<sum<<" ";
	}
	
	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>
using namespace std;
int main()
{
	int s[110][110];
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<3;j++)
		{
			cin>>s[i][j];
		}
	}
	float a,b,h;
	float e[n];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<3;j++)
		{
			if(j==0)
			{
				a=s[i][j];
			}
			else if(j==1)
			{
				b=s[i][j];
			}
			else if(j==2)
			{
				h=s[i][j];
			}
		}
		e[i]=(a+b)*h/2;
	}
	int max=-1;
	for(int i=0;i<n;i++)
	{
		if(e[i]>max)
		{
			max=e[i];
		}
	}
	cout<<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>
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 cntj=0;
	int cnto=0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(a[i][j]%2==1)
			{
				cntj++;
			}
			else if(a[i][j]%2==0)
			{
				cnto++;
			}
		}
	}
	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>
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 tmp=a[i][j];
			int s=0;
			while(tmp!=0)
			{
				s=s*10+tmp%10;
				tmp=tmp/10;
			}
			if(a[i][j]==s)
			{
				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 s[110][110];
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<2;j++)
		{
			cin>>s[i][j];
		}
	}
	int cnta=0;
	int cntb=0;
	for(int i=0;i<n;i++)
	{
		int a,b;
		for(int j=0;j<2;j++)
		{
			if(j==0)
			{
				a=s[i][j];
			}
			else if(j==1)
			{
				b=s[i][j];
			}
		}
		if(a==1&&b==2)
		{
			cnta++;
		}
		else if(a==2&&b==3)
		{
			cnta++;
		}
		else if(a==3&&b==1)
		{
			cnta++;
		}
		else if(a==2&&b==1)
		{
			cntb++;
		}
		else if(a==3&&b==2)
		{
			cntb++;
		}
		else if(a==1&&b==3)
		{
			cntb++;
		}
	}
	if(cnta>cntb)
	{
		cout<<"a win";
	}
	else if(cnta<cntb)
	{
		cout<<"b win";
	}
	else if(cnta==cntb)
	{
		cout<<"tie";
	}
	
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值