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

数据结构-顺序表-求基数乘积

题目:

https://acm.hdu.edu.cn/showproblem.php?pid=2006

解答:

#include <iostream>
using namespace std;#define SLDataType int  struct Sequlist{SLDataType* array;int size;int capacity;
};//********************顺序表初始化***********/
void InitSequlist(Sequlist* sl, int capacity) {sl->array = new SLDataType[capacity];sl->size = 0;sl->capacity = capacity;
}//********************顺序表销毁************/
void DestorySequlist(Sequlist* sl) {delete[] sl->array;
}//**********************获取顺序表长度******//
int GetSequlistLength(Sequlist* sl) {return sl->size;
}//**********************判断顺序表是否为空***//
bool SequlistEmpty(Sequlist* sl) {return sl->size == 0;
}//***************顺序表的插入********** */
void insertSequlist(Sequlist* sl, int pos, SLDataType x) {//判断pos是否合法if(pos < 0 || pos > sl->size){printf("插入位置不合法\n");}//判断是否需要增容if(sl->size == sl->capacity){int newCapacity = sl->capacity * 2;SLDataType* newArry = new SLDataType[newCapacity];for(int i = 0;i < sl->size;i++){newArry[i] = sl->array[i];}delete[] sl->array;sl->array = newArry;sl->capacity = newCapacity;}//往后挪数据for (int i = sl->size; i > pos; i--){sl->array[i] = sl->array[i-1];}//插入数据sl->array[pos] = x;//更新大小sl->size++;
}//***************************顺序表的删除元素 */
void deleteSequlist(Sequlist* sl, int pos){//判断pos是否合法if(pos < 0 || pos > sl->size){printf("插入位置不合法\n");}//删除元素for(int i = pos;i < sl->size;i++){sl->array[i] = sl->array[i+1];}//更新大小sl->size--;
}//**************************顺序表查找元素下标索引 */
int findSequlistIndex(Sequlist* sl, int x){for (int i = 0; i < sl->size; i++){if (sl->array[i] == x){return i;}}return -1;
}//************************顺序表查找元素 */
int getSequlist(Sequlist* sl, int pos){//判断pos是否合法if(pos < 0 || pos > sl->size){printf("插入位置不合法\n");}//得到元素return sl->array[pos];
}//***********************更新数据********//
void updateSequlist(Sequlist* sl, int pos, SLDataType x){//判断pos是否合法if(pos < 0 || pos > sl->size){printf("插入位置不合法\n");}//更新元素sl->array[pos] = x;
}//主要部分
int main()
{int n;while(cin>>n){int x,y;Sequlist sl;InitSequlist(&sl,1);for (int i = 0; i < n; i++){cin>>x;insertSequlist(&sl,i,x);}int z = 1;for (int i = 0; i < sl.size; i++){y = getSequlist(&sl,i);if (y%2 == 1){z = z * y;}}cout<<z<<endl;}return 0;
}

遇见问题:

我把Sequlist sl; InitSequlist(&sl,1);放在while外面,结果出现

3 1 2 3
3
4 2 3 4 5
45
3 1 2 3
135
3 1 2 3
405

但我把Sequlist sl; InitSequlist(&sl,1);放在while里面,结果就正常:

3 1 2 3
3
4 2 3 4 5
15
3 1 2 3
3
4 2 3 4 5
15

原因:总之就是放外面就只初始化一次顺序表,放里面就每次都重新初始化一次顺序表

放while外面:

  • 顺序表 sl 只初始化一次,但 while 循环会多次运行。
  • 每次循环结束后,sl 的数据没有被清空,而是继续累积。
  • 例如:
    • 第一次输入 3 1 2 3sl 存储 [1,2,3],计算 z=1 * 3=3
    • 第二次输入 4 2 3 4 5sl 变成 [1,2,3,2,3,4,5](因为 insertSequlist 是在原有数据后追加),计算 z=1 * 3 * 3 * 5=45
    • 第三次输入 3 1 2 3sl 变成 [1,2,3,2,3,4,5,1,2,3],计算 z=1 * 3 * 3 * 5 * 1 * 3=135
    • 以此类推,z 会越来越大。

放while里面: 

  • 每次循环都会重新初始化 sl,所以数据不会累积。
  • 例如:
    • 第一次输入 3 1 2 3sl 存储 [1,2,3],计算 z=1 * 3=3
    • 第二次输入 4 2 3 4 5sl 存储 [2,3,4,5],计算 z=3 * 5=15
    • 第三次输入 3 1 2 3sl 存储 [1,2,3],计算 z=1 * 3=3
    • 以此类推,每次计算都是基于当前输入的数据。
http://www.lqws.cn/news/457381.html

相关文章:

  • 《Go语言圣经》类型断言应用:高效类型判断
  • I排序算法.go
  • 如何轻松将照片从 iPhone 传输到 Android?
  • 【八股消消乐】Elasticsearch优化—检索Labubu
  • NumPy玩转数据科学
  • Java 集合框架底层数据结构实现深度解析
  • 高效打印 PDF 文档:基础操作与自动打印(含C# .NET方案)
  • tkinter 的 grid() 布局管理器学习指南
  • Matter协议开发者指南:使用Matter SDK构建智能家居应用
  • 礼让行人:深圳 vs 上海
  • 性能测试-jmeter实战3
  • GitHub Copilot 配置快捷键
  • NestJS中实现动态Cron任务管理
  • 榕壹云婚恋相亲系统:ThinkPHP+UniApp打造高效婚配平台
  • Unity3D仿星露谷物语开发66之NPC存档
  • 如何使用postman做接口自动化测试?
  • python高校工作室管理系统
  • 基于存储过程的MySQL自动化DDL同步系统设计
  • Spring WebFlux和Spring MVC的对比
  • websocket入门到实战(详解websocket,实战聊天室,消息推送,springboot+vue)
  • MVCC(多版本并发控制)深度解析:原理、流程与实战应用
  • NVIDIA开源Fast-dLLM!解析分块KV缓存与置信度感知并行解码技术
  • Flowise工作流引擎的本地部署与远程访问实践
  • cili3d笔记20 正交投影3d重建笔记1
  • http2与websocket关系
  • Seq2seq机器翻译
  • window显示驱动开发—使用状态刷新回调函数
  • ”三读四隔“:图解数据库三种读问题与四种事务隔离级别
  • 华为和H3C服务器配置远控管理地址
  • [2-02-02].第59节:功能函数 - 函数基础