当前位置: 首页 > news >正文

C++学习——顺序表(二)

文章目录

  • 前言
  • 一、求奇数的乘积
  • 二、数值统计
  • 三、青年歌手大奖赛_评委会打分


前言

本文为《C++学习》的第12篇文章,今天我们做三道HDOJ的题目来训练我们之前所学的顺序表的,模板代码。


一、求奇数的乘积

在这里插入图片描述

#include<iostream>
#include<stdexcept>

#define eleType int

using namespace std;

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

void init_list(SeqList *list, int capacity){
	list->elements = new eleType[capacity];
	list->size = 0;
	list->capacity = capacity;
}

void insert_list(SeqList *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++;
}
	
eleType get_element(SeqList *list, int index){
	if(index < 0 || index >= list->size){//注意>=号,以防越界 
		throw std::invalid_argument("invalid index");
	}
	return list->elements[index];
}

int main(){
	int n;
	while(cin >> n){
		SeqList list;
		init_list(&list, n > 0 ? n : 1);//根据输入规模来确定动态数组的范围,防止频繁扩容导致效率低下 
		
		for(int i = 0; i < n; ++i){
			int x;
			cin >> x;
			insert_list(&list, i, x);
		}
		
		int mul = 1, val = 1;
		for(int i = 0; i < n; ++i){
		    val = get_element(&list, i);
			if(val % 2 ==1){
				mul = mul * val;
			}
		}
		cout << mul << endl;
			
	}
	
	return 0;
}


这里为了加深我们对顺序表模板代码的熟悉程度,希望大家在学习的时候能把之前模板代码里在这题目中需要用到的函数接口重新手写一遍加深印象。

当然,这道题完全可以只用数组或者用STL里的vector来解决,这里便不多赘述,感兴趣的可以自己去了解一下。

二、数值统计

在这里插入图片描述

#include <iostream>
#include <stdexcept>

#define eleType double

using namespace std;

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

void init_list(SeqList *list, int capacity) {
    list->elements = new eleType[capacity];
    list->size = 0;
    list->capacity = capacity;
}

void insert_list(SeqList *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++;
}

eleType get_element(SeqList *list, int index) {
    if (index < 0 || index >= list->size) {
        throw std::invalid_argument("invalid index");
    }
    return list->elements[index];
}

int main() {
    int n;
    while (cin >> n && n) {
        SeqList list;
        init_list(&list, n > 0 ? n : 1);

        for (int i = 0; i < n; ++i) {
            eleType x;
            cin >> x;
            insert_list(&list, i, x);
        }

        int a = 0, b = 0, c = 0;
        for (int i = 0; i < n; ++i) {
            eleType ele = get_element(&list, i);
            if (ele > 0) {
                ++c;
            } else if (ele < 0) {
                ++a;
            } else {
                ++b;
            }
        }
        cout << a << " " << b << " " << c << endl;

        // 释放内存
        delete[] list.elements;
    }
    return 0;
}

三、青年歌手大奖赛_评委会打分

在这里插入图片描述

#include<iostream>
#include<stdexcept>

#define eleType double

using namespace std;

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

void init_list(SeqList *list, int capacity){
	list->elements = new eleType[capacity];
	list->size = 0;
	list->capacity = capacity;
}

void insert_list(SeqList *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++;
}

eleType get_element(SeqList *list, int index){
	if(index < 0 || index >= list->size){//注意>=号,以防越界 
		throw std::invalid_argument("invalid index");
	}
	return list->elements[index];
}

int main(){
	int n;
	while(cin >> n){		
		SeqList list;
		init_list(&list, 10);	
		
		for(int i = 0; i < n; ++i){
			eleType x;
			cin >> x;
			insert_list(&list, i, x);
		}		
		
		eleType max = -1, min =101;
		eleType score = 0;
		for(int i = 0; i < n; ++i){
			eleType curr = get_element(&list, i);
			
			if(curr > max) max = curr;
			if(curr < min) min = curr;	
			score += curr;
		}
		score -= max;
		score -= min;
		score /= (n - 2);
		
		printf("%.2lf\n", score);
	}
	
	
	return 0;
}

这就是今天的全部内容了,谢谢大家的观看,不要忘了给一个免费的赞哦!

相关文章:

  • CSS-三大特性,盒子模型,圆角边框,盒子阴影,文字阴影
  • nslookup的使用
  • 通俗解读:Occupancy Network与端到端架构
  • C盘清理技巧分享:释放空间,提升电脑性能
  • 临界比例法PID调整-附带pidtune工具和GA算法
  • python编写WEB服务器
  • 多维数据聚合方案:SQL GROUPING SETS深度解析
  • idea 生成jpa的mvc三层
  • Spring 面向切面编程 XML 配置实现
  • LabVIEW变频器谐波分析系统
  • 【leetcode hot 100 25】K个一组翻转链表
  • 使用SDKMAN!安装springboot
  • kettle-打不开提示Could not find the main class
  • nextjs15简要介绍以及配置eslint和prettier
  • halcon deeplearn 语义分割经验分享 1
  • Gazebo直接构建仿真世界
  • VSCode-Server 在 Linux 容器中的手动安装指南
  • 【技海登峰】Kafka漫谈系列(八)Controller:Zookeeper模式与KRaft模式
  • 山东2025年网络管理员报名工作经验要求与所需材料
  • 无标签数据增强+高效注意力GAN:基于CARLA的夜间车辆检测精度跃升
  • 龙湖集团:今年前4个月销售220.8亿元,4月新增两块土地储备
  • 花2万多在海底捞办婚礼,连锁餐企要抢酒楼的婚宴生意?
  • 上海发布首份直播电商行业自律公约,禁止虚假宣传、商业诋毁
  • 75岁亚当·费舍尔坐镇,再现80分钟马勒《第九交响曲》
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 国家发改委副主任谈民营经济促进法:以法治的稳定性增强发展的确定性