当前位置: 首页 > 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.lryc.cn/news/572918.html

相关文章:

  • 阿里云申请ssl证书,同时需要绑定域名,下载nginx压缩包,nginx添加证书路径即可
  • 云徙科技 OMS:让订单管理变得轻松又高效
  • 联邦学习时间开销优化:现状、挑战与研究进展
  • C#的Dynamic、Object、Var
  • 什么是Vue.js
  • Linux -- 线程、锁
  • 大模型Text2SQL之在CentOS上使用yum安装与使用MySQL
  • LeetCode 680.验证回文串 II
  • 大模型在肺癌预测及个性化诊疗方案中的应用研究
  • 数据结构-顺序表-数值统计
  • 如何自建服务器并开启公网IP:本地内网网址让外网访问详细教学
  • Nginx常见功能
  • 基于YOLO的语义分割实战(以猪的分割为例)
  • “地标界爱马仕”再启:世酒中菜联袂陈汇堂共筑新会陈皮顶奢产业
  • C++11 GC Interface:从入门到精通
  • 如何正确处理音频数据:16位整数与32位浮点数
  • JVM对象内存分配机制全解析
  • CSS Content符号编码大全
  • 「AI高校」| 《清华大学:AI赋能教育高考志愿填报工具使用指南》
  • 榕壹云婚恋相亲系统:ThinkPHP+UniApp打造高效婚配平台
  • c++set和pair的使用
  • joomla 使用nginx服务器只能打开首页,其他页面404的解决方案
  • win7上搭建FTP服务器步骤
  • OSI网络通信模型详解
  • I排序算法.go
  • 互感器铭牌图像识别系统
  • 【系统规划与管理师第二版】1.2 信息技术及其发展
  • 阿里巴巴开源的 分布式事务解决方案Seata
  • A028自动升降机+S71200+HMI+主电路图+外部接线图+流程图+IO分配表
  • HTTP与HTTPS深度解析:从明文传输到安全通信的演进之路