重生之你是C++大佬,当你打开这篇博客,竟然发现这点小题简直易如反掌,于是摩拳擦掌,写他个几千行代码。
目录
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行:第一行为素数之和,第二行为素数排序结果。
【样例输入】
5
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】
5
0 10 20 30 50
30
【样例输出1】
3
2
【样例输入2】
5
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】:
5
1 2 3 4 6
0
【样例输出1】
0 1 2 3 4 6
【样例输入2】
5
1 2 3 4 6
5
【样例输出2】
1 2 3 4 5 6
【样例输入3】
5
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;
}
数组第一部分就到这里,代码无情,人间有情,欢迎大家点赞评论加收藏。内容如有问题还请大家在评论区指点一二。