C++入门——数组1

重生之你是C++大佬,当你打开这篇博客,竟然发现这点小题简直易如反掌,于是摩拳擦掌,写他个几千行代码。

目录

1.求行最大、列最小

2.找素数

3.求各行之和、各列之和及所有元素之和

4.折半查找法

5.字符串中查找某个字符

6.数组的插入


1.求行最大、列最小

【问题描述】编写程序,找出m行n列的矩阵中每行元素的最大值以及每列元素的最小值。【输入形式】输入分m+1行:第一行为m和n的值,下面m行代表二维数组,其中每一行包括n个数。

【输出形式】输出分两行:第一行为每行元素的最大值,第二行为每列元素的最小值。
【样例输入】
3 3

1 2 -1

-3 4 2

7 9 8

【样例输出】
2 4 9

-3 2 -1

【样例说明】3行3列的矩阵,第0行元素的最大值是2,第1行最大值是4,第2行最大值是9;第0列的最小值是-3,第1列最小值是2,第2列最小值是-1。

【题目解析】分别循环求出行最大和列最小。

#include<Iostream>
using namespace std;
int a[100][100];
int main()
{
	int m, n;
	cin >> m >> n;
	for (int i = 0; i < m; i++)
		for (int j = 0; j < n; j++)
			cin >> a[i][j];
	//行最大
	int max = -9999;
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (a[i][j] > max)
				max = a[i][j];
		}
		cout << max << " ";
		max = -9999;
	}
	cout << endl;
	//列最小
	int min = 9999;
	for (int j = 0; j < n; j++)
	{
		for (int i = 0; i < m; i++)
		{
			if (a[i][j] < min)
				min = a[i][j];
		}
		cout << min << " ";
		min = 9999;
	}
	return 0;
}

2.找素数

【问题描述】编写程序,从任意n个数中找出素数,计算素数之和,并按从大到小顺序排序。

【输入形式】输入分2行:第一行为n的值,第二行为n个整数;

【输出形式】输出分2行:第一行为素数之和,第二行为素数排序结果。 

【样例输入】 

1 3 5 2 0 

【样例输出】

10 

5 3 2 

【样例说明】数列1、3、5、2、0中的素数是3、5、2,它们的和是10,对它们从大到小排序,结果是5 3 2

【题目解析】数组元素进行循环,判断是否为素数,素数组成一个数组后,对素数进行排序。

#include<Iostream>
using namespace std;
int a[100], b[100];
int main()
{
	int n,t=0,k=0,sum=0;
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	for (int i = 0; i < n; i++)
	{
		for (int j = 1; j <= a[i]; j++)
		{
			if (a[i] % j == 0)
				t++;
		}
		if (t == 2) {
			b[++k] = a[i];
			sum += a[i];
		}
		t = 0;
	}
	cout << sum << endl;
	//冒泡排序
	for (int i = 0; i < k; i++)
	{
		for (int j = 0; j < k - i; j++)
		{
			if (b[j] < b[j + 1])
				swap(b[j], b[j + 1]);
		}
	}
	for (int i = 0; i < k; i++)
		cout << b[i] << " ";
	return 0;
}

3.求各行之和、各列之和及所有元素之和

【问题描述】编写程序,计算一个矩阵的各行之和、各列之和以及所有元素之和。

【输入形式】输入分m+1行:第一行为m和n的值,分别表示矩阵的行数和列数;下面m行,每行n个数为矩阵的数据。

【输出形式】输出分三行:第一行为各行之和,第二行为各列之和,第三行为所有元素之和。

【样例输入】

2 3

1 2 3

4 5 6

【样例输出】

6 15

5 7 9

21 

【样例说明】2行3列的矩阵,矩阵中第0行元素之和为6,第1行元素之和为15;第0列元素之和为5,第1列元素之和为7,第2列元素之和为9

#include<Iostream>
#include<cstring>
using namespace std;
int a[101][101];
int main()
{
	int m, n;
	cin >> m >> n;
	int hsum = 0, lsum = 0, sum = 0;
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> a[i][j];
			sum += a[i][j];//总和
		}
	}
	//行
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			hsum += a[i][j];
		}
		cout << hsum << " ";
		hsum = 0;
	}
	cout << endl;
	//列
	for (int j = 0; j < n; j++)
	{
		for (int i = 0; i < m; i++)
		{
			lsum += a[i][j];
		}
		cout << lsum << " ";
		lsum = 0;
	}
	cout << endl;
	cout << sum;
	return 0;
}

4.折半查找法

【问题描述】编写程序,利用折半查找法从一个升序排列的数列中查找某数是否存在,如果存在则输出该数的下标,否则输出no,输出查找过程中和中间元素比较的次数。

【输入形式】输入分3行:第一行为n的值,代表数列中数的个数,第二行为n个数(升序排列),第三行为要查找的数。

【输出形式】输出分2行:第一行是一个整数值(该数的下标)或字符串“no”,第二行是一个整数值(比较次数)

【样例输入1】

0 10 20 30 50 

30

【样例输出1】

2

【样例输入2】

0 10 20 30 50 

40

【样例输出2】

no 

3

【样例说明】将数列0、10、20、30、50输入到数组中,它们作为数组元素下标分别为0、1、2、3、4,在数组中用折半查找法查找30这个数,首先和数组中的中间元素20比较,30比20大,往右查找,跟此时的中间元素30比较,正好相等就找到了,它在数组中的元素下标是3,经过2次和中间元素比较找到的。如果用同样的方法查找40,经过了3次和中间元素的比较发现它在数组中不存在

#include<Iostream>
using namespace std;
int a[101];
int main()
{
	int n, k, mid,t=0;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	cin >> k;
	int low = 1, high = n;
	mid = (low+high) / 2;
	while (low <= high)
	{
		t++;
		if (a[mid] < k)
			low = mid + 1;
		else if (a[mid] > k)
			high = mid - 1;
		else {
			cout << mid-1 << endl;
			break;
		}
		mid = (low + high) / 2;
	}
	if (low>high)
		cout << "no"<<endl;
	cout << t;
	return 0;
}

5.字符串中查找某个字符

【问题描述】编写程序,从键盘输入一任意字符串(不包含空格),然后输入所要查找字符。如果存在则输出它在字符串中第一次出现的位置,否则输出no。

【输入形式】输入分两行,第一行输入字符串,第二行输入要查找的字符

【输出形式】一个数,或者“no”

【样例输入1】

Hello 

a

【样例输出1】

no

【样例输入2】

Hello 

l

【样例输出2】

2

#include<Iostream>
#include<cstring>
using namespace std;
char a[100],b;
int main()
{
	cin >> a;
	cin >> b;
	int i;
	for (i = 0; i < strlen(a); i++)//strlen():字符串长度
	{
		if (b == a[i])
		{
			cout << i;
			break;
		}
	}
	if (i == strlen(a))//循环结束即字符串内无该字符
		cout << "no";
	return 0;
}

6.数组的插入

【问题描述】编写程序,从任意n个数(升序排列)中插入某一个数k,使得数列仍然保持升序排列。

【输入形式】输入分3行:第一行为n的值,第二行为n个数,第三行为要插入的数k。 

【输出形式】整个数列(n+1个数)

【样例输入1】: 

1 2 3 4 6 

0

【样例输出1】

0 1 2 3 4 6

【样例输入2】

1 2 3 4 6 

5

【样例输出2】

1 2 3 4 5 6

【样例输入3】

1 2 3 4 6 

8

【样例输出3】

1 2 3 4 6 8 

【样例说明】在数列1、2、3、4、6中插入0,整个数列变为0、1、2、3、4、6;如果是在数列中插入5,整个数列变为1、2、3、4、5、6;如果插入的是8,则整个数列变为1、2、3、4、6、8

#include<Iostream>
using namespace std;
int a[101];
int main()
{
	int n, k,t=0;
	cin >> n;
	int i;
	for (i = 0; i < n; i++)
		cin >> a[i];
	cin >> k;
	for (i = n - 1; i >= 0; i--)
	{
		if (a[i] <= k)
			break;
		else
			a[i + 1] = a[i];
	}
	a[i + 1] = k;
	n++;
	for (i = 0; i < n; i++)
		cout << a[i];
	return 0;
}

数组第一部分就到这里,代码无情,人间有情,欢迎大家点赞评论加收藏。内容如有问题还请大家在评论区指点一二。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值