PAT乙级1005解题心路,关于测试点1答案错误与3,4段错误

  • 最近在做PAT上的题,做到1005硬是做了很久,老有错误,最后终于做对了,随便写一点东西吧。
    话不多说先上题:
    原题

继续(3n+1)猜想 (25)

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。

当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证的时候,我们需要计算3、5、8、4、2、1,则当我们对n=5、8、4、2进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这4个数已经在验证3的时候遇到过了,我们称5、8、4、2是被3“覆盖”的数。我们称一个数列中的某个数n为“关键数”,如果n不能被数列中的其他数字所覆盖。

现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。

输入格式:

每个测试输入包含1个测试用例,第1行给出一个正整数K(<100),第2行给出K个互不相同的待验证的正整数n(1<n<=100)的值,数字间用空格隔开。

输出格式:

每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用1个空格隔开,但一行中最后一个数字后没有空格。

输入样例:

6
3 5 6 7 8 11

输出样例:

7 6


我的代码最开始是这样的


```c
#include<stdio.h>
#include<stdlib.h>
void callatz(int m,int *n);
int main(void)
{int K,m=0;if(scanf("%d",&K)!=1)   printf("cnm");int n[101]= {0};int *a=(int *)malloc(K*sizeof(int *));for(int i=0; i<K; i++){if(scanf("%d",a+i)!=1)  printf("cnm");callatz(*(a+i),n);}for(int i=K-1; i>=0; i--){if(!n[a[i]]){printf("%d",a[i]);m=i;break;}}for(int i=m-1; i>=0; i--)if(!n[a[i]])printf(" %d",a[i]);free(a);return 0;
}
void callatz(int m,int *n)
{while(m!=1){if(m&1)m=(3*m+1)/2;elsem>>=1;n[m]++;}
}

把样例敲进去,完全正确,结果一提交,测试点1答案错误,3,4段错误
在这里插入图片描述

然后自己观察了一下,发现我的算法默认的输入值是从小到大的,显然系统不这么想,于是我对我输入的值进行了排序

#include<stdio.h>
#include<stdlib.h>
void callatz(int m,int *n);
int cmp(const void *a,const void *b);
int main(void)
{int K,m=0;if(scanf("%d",&K)!=1)   printf("cnm");int n[101]= {0};int *a=(int *)malloc(K*sizeof(int *));for(int i=0; i<K; i++){if(scanf("%d",a+i)!=1)  printf("cnm");callatz(*(a+i),n);}qsort(a,K,sizeof(a[0]),cmp);for(int i=K-1; i>=0; i--){if(!n[a[i]]){printf("%d",a[i]);m=i;break;}}for(int i=m-1; i>=0; i--)if(!n[a[i]])printf(" %d",a[i]);free(a);return 0;
}
void callatz(int m,int *n)
{while(m!=1){if(m&1)m=(3*m+1)/2;elsem>>=1;n[m]++;}
}
int cmp(const void *a,const void *b)
{return *(int *)a-*(int *)b;
}

结果果然测试点1正确了,但是3,4还有段错误
在这里插入图片描述
再次研究了一会,发现3n+1有可能是大于100的,这个时候就越界了,怎么办呢?直接把我的记号数组n的长度摁到了很大,于是变成了这样

#include<stdio.h>
#include<stdlib.h>
void callatz(int m,int *n);
int cmp(const void *a,const void *b);
int main(void)
{int K,m=0;if(scanf("%d",&K)!=1)   printf("cnm");int n[9999999]= {0};int *a=(int *)malloc(K*sizeof(int *));for(int i=0; i<K; i++){if(scanf("%d",a+i)!=1)  printf("cnm");callatz(*(a+i),n);}qsort(a,K,sizeof(a[0]),cmp);for(int i=K-1; i>=0; i--){if(!n[a[i]]){printf("%d",a[i]);m=i;break;}}for(int i=m-1; i>=0; i--)if(!n[a[i]])printf(" %d",a[i]);free(a);return 0;
}
void callatz(int m,int *n)
{while(m!=1){if(m&1)m=(3*m+1)/2;elsem>>=1;n[m]++;}
}
int cmp(const void *a,const void *b)
{return *(int *)a-*(int *)b;
}

在这里插入图片描述
ok,这下是正确了,段错误也没了,但是有个问题,内存太大了,如何优化呢?起先想过逐步减小记号数组的长度来优化,后来想到了可以限制n数组的无意义值的录入,也就是在计数前加个判断语句

#include<stdio.h>
#include<stdlib.h>
void callatz(int m,int *n);
int cmp(const void *a,const void *b);
int main(void)
{int K,m=0;if(scanf("%d",&K)!=1)   printf("cnm");int n[101]= {0};int *a=(int *)malloc(K*sizeof(int *));for(int i=0; i<K; i++){if(scanf("%d",a+i)!=1)  printf("cnm");callatz(*(a+i),n);}qsort(a,K,sizeof(a[0]),cmp);for(int i=K-1; i>=0; i--){if(!n[a[i]]){printf("%d",a[i]);m=i;break;}}for(int i=m-1; i>=0; i--)if(!n[a[i]])printf(" %d",a[i]);free(a);return 0;
}
void callatz(int m,int *n)
{while(m!=1){if(m&1)m=(3*m+1)/2;elsem>>=1;if(m<101)n[m]++;}
}
int cmp(const void *a,const void *b)
{return *(int *)a-*(int *)b;
}

在这里插入图片描述

显然内存方面减少了很多了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/54296.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解题的错误在哪?

题目是有三个整数a&#xff0c;b&#xff0c;c&#xff0c;有键盘输入&#xff0c;输出最大的数 #include<stdio.h> int main() {double a,b,c,max,max1;scanf("%lf,%lf,%lf",&a,&b,&c);if(a>b)maxa;elsemaxb;if(max>c)max1max;elsemax1c;p…

计算错题集(有错误就加入错题集,持续更新)

VASP计算错题集 万事开头难&#xff0c;学习第一性原理计算的一年中碰到了很多让我困惑的问题&#xff0c;在这里总结整理出来(随时更新)&#xff0c;防止师弟师妹们陷入困惑&#xff0c;真的很让人头大&#xff0c;并且超级费时间&#xff0c;希望能帮助避雷&#xff01;如果师…

开源大模型LLaMA 2会扮演类似Android的角色么?

在AI大模型没有商业模式&#xff1f;等文章中&#xff0c;我多次表达过这样一个观点&#xff1a;不要把大模型的未来应用方式比喻成公有云&#xff0c;大模型最终会是云端操作系统的核心&#xff08;新通用计算平台&#xff09;&#xff0c;而它的落地形式会很像过去的沃森&…

中国XR产业投融资热点

导读&#xff1a; 全球XR硬件行业进入恢复增长期&#xff0c;2022年出货量超1,000万台;技术迭代和内容生态完善将释放市场潜力:中国XR头显设备市场在全球市场的占比有望持续提升。 VR硬件主要分为一体式VR硬件和外接式VR硬件:凭借轻便可移动的优势&#xff0c;一体式VR硬件逐渐…

2023年中国共享充电宝行业趋势

导读&#xff1a; 共享充电宝行业经过多年快速发展&#xff0c;大部分曾经的创业企业已经被淘汰或者业务转型&#xff0c;头部品牌梯队已经形成&#xff0c;头部品牌的竞争壁垒已经建立。从共享充电宝的竞争格局来看&#xff0c;怪兽充电、竹芒科技&#xff08;街电搜电&#x…

2023年中国银行业调查报告

导读&#xff1a; 本次报告涵盖中国经济金融形势分析、银行业发展回顾及展望、监管政策解读、行业热点话题、银行业绩数据等主要内容。我们特别邀请了来自毕马威中国银行业各服务条线咨询团队的专家&#xff0c;以全新的研究视角和方法论聚焦银行业数字化转型、可持续发展、风险…

2023顺风车行业社会价值报告

导读&#xff1a; 本次报告分为四个部分&#xff0c;以嘀嗒顺风车大数据、嘀嗒顺风车用户调研、嘀嗒顺风车缓堵研究、以及专家学者洞见为基础&#xff0c;从提升大众出行福祉、创新缓堵和减碳、促进集约和分享理念普及、增进社会信任友善与温暖四个方面&#xff0c;对顺风车社会…

2023信创软件品牌影响力研究报告

导读&#xff1a; 信创的发展正在逐渐从政策和技术驱动的基础上向市场需求驱动转变。在未来&#xff0c;除了注重合规要求、产品性能和价格因素&#xff0c;厂商还需要持续加强相关产品在市场中的认知和品牌影响力。科技企业应当把品牌塑造也放在重要位置&#xff0c;积极开展针…

2023年中国家装新趋势洞察报告

导读&#xff1a; 消费升级催生了如绿色/环保、品质/健康、高效/便捷、功能/实用、个性/美观等家装新需求&#xff0c;而从个性化设计到整装服务再到产品严选的一站式家装解决方案&#xff0c;以及低碳化、健康化、智能化、适老化、氛围感等家装产品升级&#xff0c;使得家装新…

2023年中国搜索引擎行业研究报告

导读&#xff1a; 近年来&#xff0c;随着互联网的高速发展、用户规模的不断增长和应用场景的不断增多&#xff0c;搜索引擎已经成为人们日常生活中必不可少的应用。 CTR通过案头研究、数据分析、监测和网络调研等方法进行调研&#xff0c;研究的内容包括中国传统搜索引擎行业的…

解密:股票短线起涨点的挂单玄机!

买卖十档挂单在判断起涨点方面有很重要的作用&#xff0c;起涨前有两个重要的信号&#xff0c;两个信号的共同之处就是卖二或者卖一出有相对很大的挂单。 成交量是股市的血液&#xff0c;股价想要上涨&#xff0c;必须有源源不断的新鲜血液注入&#xff0c;外在表现就是资金&a…

不知道波动率为何起起落落?这里是波动率飙升的五大因素

多数投资者都认为半死不活的低波动率市场是最难熬的。不过凭借丰富的期权工具&#xff0c;部分投资者也可以坐收”卖波动率”的收益。不管是波动率的买方&#xff08;包括一部分靠市场波动放大赚钱的CTA策略投资者&#xff09;还是卖方&#xff0c;都密切关注到底哪些因素会使得…

K线形态识别_下跌抵抗

写在前面&#xff1a; 1. 本文中提到的“K线形态查看工具”的具体使用操作请查看该博文&#xff1b; 2. K线形体所处背景&#xff0c;诸如处在上升趋势、下降趋势、盘整等&#xff0c;背景内容在K线形态策略代码中没有体现&#xff1b; 3. 文中知识内容来自书籍《K线技术分析》…

第二季电视面板部分尺寸起涨,IT面板价格反弹无望

集邦咨询光电研究中心(WitsView)最新大尺寸面板供需调查报告显示&#xff0c;在中国三条新产线以及友达8.5代线的扩产带动下&#xff0c;2018年面板供应面积达202.4百万米平方&#xff0c;年增7.9%&#xff0c;是自2013年来年成长最高的一年。 需求方面&#xff0c;电视面板需求…

【精品】通达信中长线波段起涨点幅图,选股,预警

指标用法&#xff1a; 指标信号一出&#xff0c;盘中即是买点。懂编程的看到指标编写虽然很简单&#xff0c;可是往往越简单的越真实&#xff0c;就如有人用MACD都可以出神入化。但有波段起涨点指标历史信号可靠&#xff0c;任意一只股票可复察。 公式分享给有缘人。 指标来源…

逗号算命系统 v1.02

简介&#xff1a; 逗号算命系统目前是市面上功能强大的算命系统&#xff0c; 包含姓名打分、八字测算、各种吉凶查询、各种在线灵签&#xff0c;非采集文章&#xff0c; 而是纯功能性内容&#xff0c;真正的测算系统&#xff0c;用户回头率高&#xff0c;网站PV访问量大概是IP…

在线付费起名源码/宝宝起名/八字起名/周易取名/周易八字起名平台网站源码

宝宝起名/八字起名/周易取名/周易八字起名平台网站/在线付费起名源码&#xff0c;thinkphp框架开发周易八字起名网宝宝起名在线下单网站源码自适应可二开&#xff0c;PHP权威起名策划机构平台源码&#xff0c;Thinkphp3.2给宝宝起名在线算命网站站码之家源码&#xff0c;宝宝取…

Go C画图 CSP-J CSP-S NOIP 信息学奥赛 2023.01.24 测试题

一、 单项选择题 &#xff08;共20题&#xff0c;每题1.5分&#xff0c;共计30分。每题有且仅有一个正确答案.&#xff09;。 1. 在下面各世界顶级的奖项中&#xff0c;为计算机科学与技术领域做出杰出贡献的科学家设立的奖项是&#xff08; &#xff09;。 A. 沃尔夫奖 …

Go C画图 CSP-J CSP-S NOIP 信息学奥赛 2023.01.12 测试题

6&#xff0e;提出“存储程序”的计算机工作原理的是&#xff08; &#xff09;。 A. 克劳德•香农 B. 戈登•摩尔 C. 查尔斯•巴比奇 D. 冯•诺依曼 7&#xff0e;前缀表达式“ 3 * 2 5 12 ” 的值是&#xff08; &#xff09;。 A. 23 B. 25 C…

度小满科技金融迭代:普惠小微与技术创新并肩而行

2015年&#xff0c;深度贫困乡镇隘口镇推出“本土人才”政策,呼吁大学生人才下基层,助力乡村经济振兴工作。 叶茂的人生轨迹因此而发生改变。彼时&#xff0c;20多岁的叶茂果断辞去药材公司的高薪工作&#xff0c;开始了回乡种植黄精的创业路&#xff0c;并成功竞选东坪村村主任…