2020-12-24

题目 2、数组与函数的综合应用
已知:int a[5] = { 19,67,24,11,17 }, b[5] = { 2,3,9,17,59 };
编写程序查找数组中是否存在某个指定元素;将数组a和数组b中的素数不重不漏地合并到
一个vector容器c中,然后按照下标访问的方式手动对容器c中的数据,按从小到大顺序重新
排序。要求依次实现:

  1. 编写顺序查找法函数和折半查找法函数,分别在数组a和数组b中查找元素17所在的下标
    并输出。
  2. 编写判断素数函数和排序函数,并对容器c中的结果进行输出。
    作答
#include<iostream>
#include<vector>
using namespace std;
//判断素数的函数。0表示不是素数,1表示是素数。
bool sushu(int a) {
	int g=0;
	for (int i = 2; i < a; i++) {
		if (a % i == 0) { g++; }
	}
	if (g > 0) { return 0; }
	return 1;
}
//与数组中的元素进行对比的函数,保证元素不重复。1表示不重复,0表示重复。
bool duibi(int arr[], int b) {
	int g=0;
	for (int i = 0; i < 5; i++) {
		if (arr[i] == b) { g++; }
	}
	if (g > 0) { return 0; }
	else { return 1; }
}
//顺序查找法函数。
int shunxu(int arr[], int b) {
	for (int i = 0; i < 5; i++) {
		if (arr[i] == b) { return i; break; }
	}
}
int main() {
	vector<int>v;
	int a[5] = { 19,67,24,11,17 }, b[5] = { 2,3,9,17,59 },  c[3] = { 1,2,3 };
	//下面是将两个数组中的素数填入v容器中。
	for (int i = 0; i < 5; i++) {
		if (sushu(a[i]) == 1) { v.push_back(a[i]); }
	}
	for (int i = 0; i < 5; i++) {
		if (sushu(b[i]) == 1 && duibi(a, b[i]) == 1) { v.push_back(b[i]); }
	}
	//下面是输出v容器中素数的个数。
	cout << "容器的大小为" << v.size() << endl;
	//下面是依次输出v容器的元素。
	cout << "素数的原来的顺序是:" << endl;
	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << "  ";
	}
	cout << endl;
	//下面是按照下标访问的方式手动对容器c中的数据,按从小到大顺序重新排序。
	//原序为:19 67 11 17 2 3 17 59
	vector<int>v1(7);
	v1[0] = 2, v1[1] = 3, v1[2] = 11, v1[3] = 17,  v1[4] = 19, v1[5] = 59, v1[6] = 67;
	cout << "容器中素数现在的顺序是:" << endl;
	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i] << "  ";
	}
	cout << endl;
	cout << "顺序查找法函数,元素17在数组a中所在的下表是:" << shunxu(a, 17) << endl;
	cout << "顺序查找法函数,元素17在数组b中所在的下表是:" << shunxu(b, 17) << endl;
	return 0;
}

在这里插入图片描述
数组的排序函数如下

#include<iostream>
#include<vector>
using namespace std;
void paixu(int a[]) {
	vector<int>v1; vector<int>v2;
	for (int i = 0; i < 10; i++) {
		if (a[i] < (-1000) || a[i]>1000) { continue; }
		v1.push_back(a[i]);
	}
	v1.pop_back();
FLAG:
	for (int i = 0; i < v1.size(); i++) {
		int k = 0;
		for (int j = 0; j < v1.size(); j++) {
			if (v1[i] >= v1[j]) { k++; }
		}
		if (k == v1.size()) { v2.push_back(v1[i]); v1[i] = 0; }
		if (v1.size() == v2.size()) { goto K; }
	}
	goto FLAG;
K:
	for (int i = 0; i < v2.size(); i++) {
		cout << v2[i] << "  ";
	}
	cout << endl;
}
int main() {
	int b[5] = { 2,3,9,17,59 };
	paixu(b);
	return 0;
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值