顺序表1:2006-求奇数的乘积

题目链接
https://acm.hdu.edu.cn/showproblem.php?pid=2006
Problem Description
给你n个整数,求他们中所有奇数的乘积。

Input
输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。

Output
输出每组数中的所有奇数的乘积,对于测试实例,输出一行。

Sample Input
3 1 2 3
4 2 3 4 5

Sample Output
3
15
一:用顺序表

点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;

#define eleType int

struct SequectialList {
	eleType* elements;
	int size;
	int capacity;
};

// 初始化
void initiallizeList(SequectialList* list, int capacity) {
	list->elements = new eleType[capacity];
	list->size = 0;
	list->capacity = capacity;
}

// 销毁
void destroyList(SequectialList* list) {
	delete[] list->elements;
}

// 获取顺序表大小
int size(SequectialList* list) {
	return list->size;
}

// 是否为空
bool isEmpty(SequectialList* list) {
	return list->size == 0;		// 空:1,非空:0
}

// 插入元素
void insert(SequectialList* list, int index, eleType element) {
	if (index<0 || index>list->size) {
		throw std::invalid_argument("Invalid index");
	}
	if (list->size == list->capacity) {
		int newCapacity = list->capacity * 2;
		eleType* newElements = new eleType[newCapacity];
		for (int i = 0; i < list->size; ++i) {
			newElements[i] = list->elements[i];
		}
		delete[] list->elements;
		list->elements = newElements;
		list->capacity = newCapacity;		// 扩容
	}
	for (int i = list->size; i > index; --i) {
		list->elements[i] = list->elements[i - 1];
	}
	list->elements[index] = element;
	list->size++;
}

// 删除元素
void deleteElement(SequectialList* list, int index) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid index");
	}
	for (int i = index; i < list->size - 1; ++i) {
		list->elements[i] = list->elements[i + 1];
	}
	list->size--;
}

// 根据元素值找下标
int findElements(SequectialList* list, eleType element) {
	for (int i = 0; i < list->size; ++i) {
		if (list->elements[i] == element) {
			return i;		// 找到返回下标
		}
	}
	return -1;		// 没找到返回 -1
}

// 根据索引找值
eleType getElement(SequectialList* list, int index) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid index");
	}
	return list->elements[index];
}

// 元素修改
void updateElement(SequectialList* list, int index, eleType value) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid index");
	}
	list->elements[index] = value;
}

int main() {
	int n;
	while (cin >> n) {
		SequectialList s;
		initiallizeList(&s, 1);
		int x;

		for (int i = 0; i < n; ++i) {
			cin >> x;
			insert(&s, i, x);
		}
		int prod = 1;
		for (int i = 0; i < size(&s); ++i) {
			int ret = getElement(&s, i);
			if (ret %2==1) {
				prod *= ret;
			}
		}
		cout << prod << endl;
	}
}

二:用数组

点击查看代码
#include<iostream>
using namespace std;

int a[10000];

int main() {
	int n;
	while (cin >> n) {
		int x;
		for (int i = 0; i < n; ++i) {
			cin >> x;
			a[i] = x;
		}
		int prod = 1;
		for (int i = 0; i < n; ++i) {
			int ret = a[i];
			if (ret %2==1) {
				prod *= ret;
			}
		}
		cout << prod << endl;
	}
}
posted @ 2025-03-06 13:48  一点都不无聊  阅读(24)  评论(0)    收藏  举报