float&&double
推荐全部使用double,注意区分scanf("%lf",&double1);
与printf("%f",double1);
分清%md
,%0md
,%.md
以及可以合用%n.md
getchar()&&putchar()
getchar可以识别换行符\n
看完 2.4 跟着coding
page39**
BubbleSort
#include
void BubbleSort(int a[],int n){
int i,j;
for(i=n-1;i>=0;i--){ //每次排序的长度(第一个到第i个)
int flag=0;//加入标志
for(j=0;ja[j+1])
swap(&a[j],&a[j+1]);
flag=1;
}
if(!flag) break;
}
}
int main(){
int a[10];
for (int i=0;i<10;i++){
scanf("%d",&a[i]);
}
int n=sizeof(a)/sizeof(int);
BubbleSort(a,n);
for(int i=0;i
memset
需添加
头文件
memset(a,值,sizeof(a)); //值只能用0,-1;按位赋值;
sscanf&sprintf
void change(int a[],int b[][5]); //传参数二维数组需要写大小,且数组是传地址,修改即是对原数组的修改。
字符串的swap
void swap(char *a,char *b){
char temp[20];
strcpy(temp,a);
strcpy(a,b);
strcpy(b,temp);
}
int main(){
char str1[20],str2[20],str3[20];
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str1,str3)>0) swap(str1,str3);
if(strcmp(str2,str3)>0) swap(str2,str3);
printf("%s\n%s\n%s\n",str1,str2,str3);
return 0;
}
构造函数初始化结构体
struct studentInfo{
int id;
char gender;
char name[20];
studentInfo *next;
studentInfo(){}
studentInfo(char _gender){gender=_gender;}
studentInfo(int _id,char _gender){id=_id;gender=_gender;}
studentInfo(const char* a){strcpy(name,a);}//注意const
}Alice;
studentInfo Bob =studentInfo("Bob Jobs");
const double Pi=acos(-1.0);
定义Pi;
第2章还差最后一节黑盒测试。明天看完开始第三章。
//while(scanf("%d",&n)!=EOF){}
//while(scanf("%s",str)!=EOF){}
//while(gets(str)!=NULL){}
//if(!n) break;
今日AC
1046 case3超时 修改思路一边读取一边统计路径。减少遍历次数
1001错误一个,记得考虑特殊情况0;
1002错误一个,注意判断浮点数的时候,用差的绝对值比较呀fabs(coeff[i]-0.0)>10e-5
漏掉了一个fabs导致一个用例一直错误。
1005①错误一个,记得考虑0;②PAT编译器不支持gets
,整行读取使用c++的cin.getline(str,len)
,加上 #include
The function
std::gets()
was deprecated in C++11 and removed completely from C++14.
1008读题认真。while(scanf("%d,&n)!=EOF)
编译器端失灵,可能和没法手动Ctrl+Z有关。学到一个新方法
do{……}while((c=getchar())!='\n')
看了第三章第一节开始做PAT网站上的题,书要放慢速度啃了。争取每天AC5题,多的时间过书和书后的习题。
今日AC
1006 EZ.
1007全是坑,自己思路没错但是输出格式错误。注意各种0的情况。动态规划方法
1009正常做。注意输出格式。在不溢出的情况下,申请数组可以尽量大些,基本也不影响超时。
1011EZ.
1010进制转换问题。无法AC。AC代码似乎要用二分法搜索【0711已AC】
今日AC
1012学习使用C++的sort
,算法笔记P235,sort(a,a+N,cmp);
1015测试用例2折腾半天,质数的判断,最好还是吧0,1,2单独列出来返回结果。0,1不是质数(也不是合数,2是质数)质数英文prime number。
1019EZ.注意特殊情况0即可。
未完成:
1016Phone bills,太复杂了,读懂意思到写出完整代码花了一个多小时,然后样例过了测试全错,找不到格式错误,逻辑似乎也没有问题,自己编的例子看起来也都跑通了,有时间再看看别人ac的代码吧,或者学了别的数据结构重写。【20190718已AC】
1020二叉树看了开头,明天继续,【20190701已AC】
AC:
1020二叉树,基础题,跟着算法笔记复习了一遍前中后层次四种遍历,以及利用前中、中后遍历数据构建二叉树的算法。代码全部贴进去了。代码
1094EZ.再做可以用树试试;
1079EZ.数组大小波动大时用vector
未完成:
1056 复习到队列再试试【20190702已AC】
AC:
1064 完全搜索二叉树 重点再做做 代码博文
1054 只需要得到最大的数是什么的话,对对碰遍历一遍即可~ 很有启发性的巧题;
1047基础题,优化一下就可以过最后一个用例了,
1031EZ
1110判断是否为完全二叉树
完全二叉树需要满足:
1)如果一个结点有右孩子而没有左孩子,那么这棵树一定不是完全二叉树。
2)如果一个结点有左孩子,而没有右孩子,那么层序遍历里这个结点之后的所有结点都是叶子结点这棵树才是完全二叉树。
3)如果一个结点是叶子结点,那么层序遍历里这个结点之后的所有结点都必须是叶子结点这棵树才是完全二叉树。
调试半天错在输入的数可能是两位数,不能用char字符。汗
1056 用队列做了一遍,优先级队列好像不太好,然后题意一直都是读错的。T.T 输入的第三行数据是默认的程序猿0-N-1,然后根据这个数字选择第二排的mice
未完成:
sort(a.begin(),a.end(),cmp);
距离就只能begin+n这样了;getchar();scanf("%[^\n]",keywordtemp);
这种整行读取的方法。AC:
1052需要再做一遍的简单题!(最后一个测试点很坑)思路还是要严谨啊!
1042EZ 洗牌,注意可能有多个环链,所以没法排序按照洗的次数直接整体位移,先分组太麻烦了,因为只有54张牌所以时间复杂度高不起来,直接基础思路做就ok。
1028EZ sort排序基础题
1035水题,代码10分钟写完,调试半个小时,输入输出的特殊情况读题!读题!!读题!!!
1057实现一个带有后进先出、输出排序下的中间值的堆,用了两个vector数组同步操作,一个后进先出、一个排序
temp.erase(lower_bound(temp.begin(),temp.end(),last));//排序数组出数last=*(s.end()-1);
temp.insert(lower_bound(temp.begin(),temp.end(),num),num);//排序数组插入数
s.pop_back(); //正常数组出数
s.push_back(num);//正常数组进数
printf("%d\n",*(temp.begin()+(size+1)/2-1));//输出中间值
1144超大数组定义在全局。#define MAX 2147483647
1049数不大于N的正整数中1出现的个数。反复递归。(事实证明直接硬算都可以拿26分,考试的时候应该直接试一下复杂度是否超过)
未完成
1045顺序数列的最大值。想不清楚怎么做。感觉要贪心 【0724已经完成 dp动态规划】
AC:
1038一段段的数据排序得最小总数,cmp函数占一半,有机会再看看别人得思路。坑:测试点2全是0,最后也要输出一个0,如果是多个数0,前面得0都不输出。
1029内存溢出题,题目限制1.5MB,然后吓唬你所有数据不超过long int
,实际上按照最大规模2^10e5个long int(每个8字节,就是1.6MB了?,所以答案不可能是long int
,事实上所有测试数据也都不超过int。【似乎还是有问题,第一个序列就一个long int数据咋搞。】
学习点:define MAX 0x7fffffff
,再也不用记2的32次方-1
是多少了。
1023字符串数字翻倍;EZ
1065大数据加减…一共三个用例,全是0?????
未完成:
int i=0,j=0;
while(i=0&&j>=0&&arrc[i]>0&&arrp[j]>0){
sum+=arrc[i]*arrp[j];
i--;j--;
}
1073 EZset
,自动排序去重
很方便。AC
1061 读题
1067 只用swap(0,i)排序。时间复杂度过不去,调试优化一小时。哭了
1069 EZ
未完成
1060 浮点数的科学计数法表示。【0714已完成】
AC
1055 基础排序题。
未完成
1068 找硬币升级版,受八皇后启发写的递归,不完美退出各种问题,拿了28分,感觉可以直接按顺序来。【0718更新29/30】
1075排序,坑多,还是有问题22/25分【0710已完成】
string
相关操作需要巩固(reverse
函数)研究了一下中缀表达式转后缀表达式计算,博客记录、参考资料、算法笔记P249
不足:还没实现输入小数的识别,以及对括号的识别;下次再做。
AC
1010二分法的进制转换【膜柳神】一个很巧妙的点,如果转换成十进制的数,超过了long long上限,会变成负数,也是大的表现。这一点得10分。学习代码思路:
long long findradix(string c,long long n){
char it=*max_element(c.begin(),c.end());//最大元素max_element返回的是迭代器。
long long low=(isdigit(it)?it-'0':it-'a'+10)+1;//最小进制要比最大元素大1;
long long high=max(n,low);
while(low<=high){
long long mid=(low+high)/2;
long long t=any2dec(c,mid);
if(t<0||t>n) high=mid-1;//t<0;转换的进制溢出,也是大于n
else if(t==n) return mid;
else low=mid+1;
}
return -1;
}
1152找出序列中的第一个prime数,注意(0,1不是素数)注意输出前面的0,所以干脆直接输出取出来的字符串。字符串转数字好像有个stoi
函数,不过自己写一个也很快。
未完成:
101419/30没找到逻辑问题 队列【0724已AC】
reverse
函数在
里,reverse(str.begin(),str.end());
getline(cin,str);
s1.find(s2[i])==string::npos
string::npos
表示找不到字符串。touppr
是include
里的变成大写的函数。int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
AC
1096 求公因数里的最长连续串,题意理解不要错了,这个串乘起来不能比原来的数大 = =
1097 EZ 链表地址题目,似乎都不用真的建立链表结构2333
1100 EZ
1104 很简单的题,但是提醒了一个问题sum+=temp*i*(n+1-i);(0
sum+=*i*(n+1-i)*temp;
i*(n+1-i)
有可能溢出。。。
1105建立“回”型二维数组,海星。
1106 DFS同时记录最深节点个数。好好学下别人的代码。。自己写的太多无用项了。
1108 新的处理字符串的函数:【拓展学习】
scanf("%s",a);
sscanf(a,"%lf",&temp);
sprintf(b,"%.2f",temp);
1109 多重排序+找规律,时间复杂度优化。
1112 简单题但是感觉写的不精炼
1113 EZ
未完成:
1095 测试点4找不到错。27/30 STL常规题【0726已AC】
1098 蜜汁段错误,23/25 堆排序和插入排序比较 其实好像不需要模拟出来,各种排序都是有特点的。。比如插入排序前面就是排好的,后面是原顺序。堆排序后面是排好的。【0725已AC】
vector().swap(a);
a为需要释放的vector(swap到新定义的里面。)AC
1129 一遍读取一遍排序输出当前排序结果。使用set可以自动排序,但是多个元素构成的结构体放进set里 需要重载运算符
struct info{
int qnum;
int time;
bool operator <(const info &a) const{
return (time!=a.time)?time>a.time:qnum
1132 被除数为0的时候取余也会引发浮点错误。
1016重写了一遍当时调试了很久的代码,一遍过了可还行。
未完成:
1068二次挑战dfs+剪枝还是最后一个点超时 29/30 看柳神说是01背包问题
(int)(expression+0.5)
transform(temp.begin(),temp.end(),temp.begin(),::tolower);
vector().swap(q[]);
AC
1080按顺序分配位置,排序逻辑基础题~25分钟一遍过很顺利。
1072dijkstra,调试半个小时最后发现是题目意思理解错了,满足条件的解里面最小距离里取最大的,一样大取平均距离最小的…蜜汁设定,然后根据柳神博客提醒,这种没说清楚有没有多条路的可能有脏数据,比如1-1距离为999,重复道路距离不一样…不过这道题并没有,目前也没碰到有脏数据的。所以这样看的话,邻接矩阵在输入的时候的筛选确实比邻接表方便多了,但是数据规模超过1000空间占用就得考虑了。
1017 模拟题,本来写的好好的,因为最后结果浮点数的问题,怀疑自己的思路检测了一个多小时。double res=int/int
是错误的…int/int直接就是整型保留了。
1086 根据前序和中序(出堆顺序)建树,输出后序。复习建树
未完成
1087 图的两点间所有路径遍历,下次再写一遍。22/30【0726已AC】
1026 模拟题。细节。冷静的时候再练吧。。25/30
void downadjust(int b[],int s,int e){
int i=1,j=i*2;
while(j<=e){
if(j+1<=e&&b[j]=b[j]) break;
swap(b[i],b[j]);
i=j;j=i*2;
}
}
1147 判断是否为大顶堆、小顶堆,输出后序。注意判断的界限<=n/2前一半(没有子节点)AC
1087 最短路径计算前缀,dfs输出所有最短路径结果,再计算比较最优解。重新做一遍过。用时约45分钟。
1095 STL 常规排序复杂模拟题,重写一遍过,用时约25分钟。
1018自行车管理系统,和1087做法一样,用pre保存所有最短路径,dfs以后挨个计算。一遍过~用时30分钟。
未完成
1026 tabletennis 破题 又把自己做自闭了。这种按时间的模拟题咋做啊。。
AC
1103 DFS 有点不好想,一定要再独立写一遍理解加深。
1119 前序后序建树并确定是否唯一。很有意思的题目!后序的左右根,倒数第二个数就可以认为是右子树的根。在前序中查找这个树来划分。
1122 图遍历检测,EZ
1127 间隔倒序层次遍历。
1130 表达式的中缀输出。还要加括号。DFS 分析:首先根据所有孩子结点编号寻找1~n中没有出现过的编号标记为root,即树的根结点~然后进行从root结点开始dfs~dfs递归拼接 “(” + 左子树 + 根 + 右子树 + “)”
递归有四种情况(有效的只有三种):
1. 左右子树都空 返回 “(” + 根 + “)”
2. 左空右不空 返回 “(” + 根 + 右子树 + “)”
3. 左不空右空 这种情况不存在
4. 左右都不空 返回 “(” + 左子树 + 根 + 右子树 + “)”
最后递归返回的ans,最外层可能会被括号包起来,也可能不被包起来。要判断一下,如果被包起来,把最外层括号去掉
未完成
1131 22/30 地铁。一个超时一个错误。
%04d
if(state[k]*a[abs(state[k])]<0) lie.push_back(k);
最后判断撒谎的人数是不是两个人,是不是一个好一个坏。%03d,%06d
2.同样类型的查询,前面用过的计数数组要清空(type==3) 3. 0个结果输出NA 4. 输出格式的空格。