PAT basic level 1001-1019 解题笔记
1002 写出这个数
采用字符串输入数据,再对每位减去字符‘0’,得到该位相应的整数
int len=s.length();//字符串的长度
int t=;
for(int i=;i<len;i++)//每位减去‘0’,逐位相加
{
t=t+s[i]-'';
}
根据题意,所得数应小于1000,获取每位的数字采用整除取余的方法
==================================
1003 我要通过
这道题好坑爹,自己没有做出来,看了网上的程序。根据题意,字符串中有且必须有至少PAT各一个,P和T只能出现一次。aPbTc成立,则aPbATca成立,这里最坑爹,一直理解错误,实际这里的意思是,a,b,c只能是A,a与c中A的数目相同。而且对aPbATc(这里包括了前面说的aPbTc形式),记a,b,c中A的次数分别为t1,t2,t3,则应满足t3=t2*t1。
参考的程序采用了string类的find_first_not_of();函数记录位置。最后判断是否满足上述关系。
===================================
1004 成绩排名
采用了动态数组。判断成绩项的大小,最后输出即可。
=======================================
1005 继续3n+1猜想
思路:利用一个缓存容器存放每个元素计算kalatz数列的结果,并与输入数列全部元素比较,如果有重合的则置零。比较过程中,遇到0不比较。比较结束后,将输入数列中的0元素删除得到“关键”元素,最后排序并输出。p.s. 其实感觉这种方法挺复杂的,不怎么好,智商捉急啊。
实现涉及到容器的删除:
ptr=v.erase(ptr);
=========================================
1007 素数对猜想
这个题目首先得得到素数,关于素数的求法网上有总结,利用素数的特征可以简化求取的过程。
chara1.只能被自己和1整除(1不是素数)
chara2.所有的偶数都不是素数(显然的,但是这条性质理解容易,编程的时候想到不易,且编且珍惜~~~~)
chara3.对数n,只需验证数sqrt(n)之前的素数是否能够整除即可
简化的方法有两种,一种是分10,100,10000,这样的区间去求,这种方法应该是所有方法中在数字比较大的时候最高效的,因为每次需要验证的数都少了很多。另外一种“筛法”,这种方法好理解,但是经验证在数据超过10000的时候就变得很慢,速度不及前一种方法。(果然还有更简单的方法 http://blog.csdn.net/cstopcoder/article/details/18795823)
至于满足题给条件的素数对,只需逐一验证即可。
==========================================
1008 数组循环右移
简单,先给出了数组的长度n和右移的位数m,只需要先从输入中获取n-m位数据A,再获取m位数据B,再把两组数据接起来就行了BA。
=====================================
1009 说反话
思路也简单,只需要以单词为单元,把单词倒序输出。实现上需要前后空格的位置,采用同1003的方法,把单词逐个压入栈中,最后输出即可(用top函数)。
p.s. 一开始把题目看错了,以为是把每个单词中的字母顺序反过来,费了大半天功夫实现发现不和题意。可见认真审题的重要性啊!
======================================
1010 一元多项式求导
这里需要判断回车,之前采用string类先整体输入,再删除空格,然后转化为数字的方法,但是实现起来相当麻烦。网上搜了半天找到了如下的办法:
vector<int> v;
vector<int>::iterator ptr; char c;
int temp;
while((c=cin.get())!='\n')//判断输入是否为回车
{
cin.unget();//若不是则将字符放回流中
cin>>temp;
v.push_back(temp);
}
另外,还需要考虑最后把常数项求导结果删除,采用-1作为特征数,把-1和前面的0删除。还需注意幂为负数的情况。
======================================
1011 A+B和C
看起来很简单,但是两个int型相加有可能会超出int的范围,采用double型数据规避这个问题,不知还有没有好方法……
刷了11道basic level 感觉简单的倒是挺简单的,可以很快搞出来,但是需要注意详细审题,把各种情况考虑周全。难的题最多的可能花了一天才搞出来,这还何谈advanced level 90分以上啊!!路漫漫啊!加油!
======================================
1012 数字分类
这道题不难,只需要对每个数字对5取余,按情况分类即可。其中用到了switch,比较基础。另外用到了输出的精度设置。精度的设置需要使用iomanip头文件下的setprecision 函数,在流对象中,setprecision(n)设置有效数字位数为n,如果需要固定小数点后的位数则需另外加上fixed,如
float num=1245.234567;
cout<<num<<endl
<<setprecision()<<num<<endl
<<fixed<<setprecision()<<num<<endl;
输出依次为1245.23,1.25e+003,1245.234,这里没设置精度时默认输出六位有效数字。
==========================================
1013 数素数
按理说,在1007的基础上这道题不难解,但是,按照分段求的方法,需要控制求素数的范围以提高效率。这样就需要知道各段内的素数个数,虽然这样最后实现了,但是程序还是一如既往的乱,绕得晕头转向。最后借鉴了别人的求素数的方法,如1007最后加的连接。
=======================================
1014 福尔摩斯的约会
这道题比较坑,跟PAT那道一样,需要仔细审题,把题目中的意思详细理解清楚。比如第一个求星期那里,需要限制字符A-Z,在这里栽了很多次。
================================
1015 德才论
这道题需要做两件事情,第一是统计总分,第二件是归类。我的思路是先按总分排序,然后依次输出符合每类条件的信息。这样做就有排序按什么排的问题。一开始利用冒泡排,有三个点过不去。后来看了别人的博客,这里有两点需要注意的,第一是排序的方法,最好使用O(nlgn)的算法。STL中自带的sort,可以按照输入待排序数据的个数合理选择方法。另外还有qsort()函数。sort()函数默认是升序排序,如果需要降序可以编写自己的compare函数,如果需要控制排序对象的排序规则,也可以编写自己的compare函数实现。
===============================
1016-1019 都比较简单
================================
1020 月饼
这道题要求算出最大的利润,开始还以为是线性规划,搞得觉得做不出来,变量太多。看了别人的解释,发现自己太没有生意头脑了……至于解的过程是比较简单的的,只要按照单价由高到低购买,直到满足总的采购量为止,算法用了O(n2)的,在1000个数据以内应该没啥问题。没有想出来更好的算法。
PAT basic level 1001-1019 解题笔记的更多相关文章
- PAT Basic Level 1001
大纲考察内容 数据存储结构:数组.链 基础算法:递归.排序.计算时间复杂度.空间复杂度.分析算法稳定性 1001.害死人不偿命的(3n+1)猜想 (15) https://www.patest.cn/ ...
- PAT (Basic Level) Practice 1019 数字黑洞 分数 20
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有" ...
- PAT (Basic Level) 1001害死人不偿命的(3n+1)猜想 (15)
卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...
- PAT (Basic Level) Practice (中文)1078 字符串压缩与解压 (20 分) 凌宸1642
PAT (Basic Level) Practice (中文)1078 字符串压缩与解压 (20 分) 凌宸1642 题目描述: 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一 ...
- PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642
PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下 ...
- PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642
PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642 题目描述: "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大 ...
- PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642
PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642 题目描述: 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每 ...
- PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 凌宸1642
PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的 ...
- PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642
PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 目录 PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) ...
- PAT (Basic Level) Practise (中文)-1039. 到底买不买(20)
PAT (Basic Level) Practise (中文)-1039. 到底买不买(20) http://www.patest.cn/contests/pat-b-practise/1039 小红 ...
随机推荐
- [已解决]IndentationError: unindent does not match any outer indentation level
最近跟同事合作代码没有用git进行协同,很多代码拷贝后进行粘贴,常常报以上错误. 经过查询发现是空格跟tab混合使用了,重新将代码的缩进手动调整下就好了.
- 关于jmeter工具使用的总结
今天总结下jmeter工具如何使用 先从最简单的说起 如何打开jemter 配置环境变量 接下来我们只要在dos窗口中输入 jmeter就能打开,这也告诉了我们配置环境变量的方便性 接下来介绍一下线程 ...
- java中注解的使用
使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节.注解就是用于修饰类.全局变量.方法.参数或局部变量的接口,java中规定,注解的使用 ...
- 七牛php-sdk使用-多媒体处理
在七牛对象存储可以创建公共的bucket和私有的bucket,私有的不可以直接使用域名加资源key的方式进行访问,需要附加下载凭证. 私有bucket 关于下载凭证的生成,php-sdk已经提供了方法 ...
- SDWebImage 加载显示 WebP 与性能问题
SDWebImage 加载显示 WebP 与性能问题 本文包含自定义下载操作 SDWebImageDownloaderOperation 与编码器 SDWebImageCoder.SDWebImage ...
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解&源码
Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体 ...
- UESTC 1591 An easy problem A【线段树点更新裸题】
An easy problem A Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others ...
- Servlet面试题归纳
尊重原创:http://blog.csdn.net/caohaicheng/article/details/38116481 1.说一说Servlet生命周期 Servlet生命周期包括三部分: 初始 ...
- JVM GC杂谈之理论入门
GC杂谈之理论入门 JVM堆布局介绍 JVM堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ( Young ) 又被划分为三个区域:Eden.From Sur ...
- debian 9 双显卡安装NVIDIA显卡驱动
最近用debian,给debian装n卡驱动折腾了好几天了,主要还是网络不好,官方wiki的方法下载经常卡死..摸索了几天感觉已经摸到了头绪,决定写下来供大家参考参考 先提供单显卡NVIDIA驱动的安 ...