OJ BLOG
记录点滴
20200208
OJ网站 C语言网
P1072
OMG 臣妾做不到啊!!!!
P7073 弟弟的作业(scanf处理)
1、学习处理scanf()
返回值的问题。
EOF
为文件结束标志。 windows中Ctrl+Z
为输入结束标志,Linux中Ctrl+D
为结束标志。
scanf
的返回值大小等于正确读入的变量个数,无则为0。
输入EOF
标记,返回值为-1
2、学习取反~
运算符
取反是将二进制数所有位数取反,即0变1,1变0;
注意:-1取反的结果是0
以八位二进制为例
1 2 3 4 5 6 7 8
-1 1 1 1 1 1 1 1 1
~-1 0 0 0 0 0 0 0 0
*************************************
下面是如何计算出-1的二进制(补码)
位数 1 2 3 4 5 6 7 8
-----------------------------
1 0 0 0 0 0 0 0 1
取反 1 1 1 1 1 1 1 0
加一 1 1 1 1 1 1 1 1
-1 1 1 1 1 1 1 1 1
Tips1 -1取反的值为0
P1074 数字整除
1、读题目获得关键信息,并且根据例子总结出解题规律
2、根据样例输入输出,获得输入输出变量的类型和处理变量的方式
数字整除这道题目主要是对题目给定的定理的运用。
先看题目——获得关键信息:定理以及运用定理的例子
再看样例输入——获得输入输出的变量类型及特点
样例输入中有个样例是:
1717171717171717171717171717171717171717171717171718
可以看到样例输入中的这个数据非常的大,无论转化成什么都是不行的(精确度最高的整型数据类型是unsigned long long
(max=264)显然这是不够的)
所以必须将这道题目转化为数组(或者是字符串)来计算。
P1075 台球碰撞
原谅我,这道题目太难了
20200209
P1076 内部收益效率
1、极大值和极小值的大小
设置极大值和极小值有利于增加浮点数的精确度
如:double mindot=1e-6, maxdot=1e6
2、变量范围的把控
注意读题,准确把握变量的范围
3、元素初始化的位置的问题
主要针对循环中关键元素初始化的初始化,循环开始的位置需要初始化
4、代码美化,尽量使用简洁的元素名称,避免使用过于复杂的名称,减少出现拼错或者代码成块的现象。
20200210
今天有些颓废啊,仅仅做了两个题目,还是不算特别难的
大部分时间都用在寻找壁纸和研究桌面的一些主题上的,不过找到了自己喜欢的主题颜色
设置了主题颜色是绿色,叫运动绿;背景是印度尼西亚KeLing King Beach。
感觉不错的
做了一道题目,全部是英文,看不懂。我现在终于理解学好英语对编程的用处很大这句话了
P1903、
P1094 字符串的输入输出处理
1、gets()
和scanf()
对字符串的读入处理
gets()读入字符串以'\n'
结束,并不会读取'\n'
scanf()读取字符串以'\n'
或' '
结束,但并不会读取回车或者space
2、puts()
对字符串的输出处理
puts()输出的字符串占据一行,并不会像printf一样输出下一部分接着输出。
下面是测试字符串输入输出的代码以及截图
#include<stdio.h>
#include<string.h>
char s[1000];
int main()
{
int n,i=0,j,k,flag=1;
scanf("%d", &n);
getchar();
for(i=0;1;i++){
if(i<n){
gets(s);
puts(s); //puts()输出字符串单独占一行,结束换行
}
else{
if(scanf("%s", s)+1);
else break; //EOF结束
printf("%s\n", s);
}
printf("\n");
}
return 0;
}
P1095 The 3n + 1 problem
这道题目给我最大的打击就是我不会英语啊,题目看的不大懂。好难过。
P1096 Minesweeper
1、读题,即使这道题目是英语,认真读题目
2、注意输入输出的格式,认真读题
3、读取字符时,错误读取回车
进行字符串读取的时候,一定要注意缓存区中是否含有回车,该回车应该怎么处理
尤其是使用scanf()
进行读取,使用getchar()
清空缓冲区
4、写完代码后进行仔细检查,是否存在使编译不通过的点,以及手误打错的地方(逻辑)
5、总结出读题要点
analyse question lime light:
point 1:题目要求
point 2:输出格式
20200211
P1098
P1097 蛇形矩阵
1、除了细节没有别的东西
P1099 校门外的苹果树
1、全局变量定义时初始化并不会将所有的位置全部初始化。
P1100 采药(动态规划)
学习动态规划去了,然后就接着B站视频看下去。。。自闭了
20200212
续P1100
P1100 采药(续)
1、注意每个细节条件的设置
20200214
今天一上午和半个下午都在干嘛?一直在P1101上面,但是就是写不出来
下午和晚上一直在玩游戏,已经好几天没玩了,单纯玩游戏的感觉好爽啊,不在乎输赢,只是为了玩游戏而玩游戏
P1101 循环****
话说我写不出来,是不是一直在浪费时间啊?
P1102 明明的随机数
The code is to separate the two cases.
Why? Because if I put them together to handle it, it will make it complex;
1、观察当前问题是否已经解决。(Mostly Experiences)
20200215
唉,时间都长草了,荒废的荒废
P1103
- 读题要认真啊
P1104
20200216
不知道为什么,总是想去玩,唉,自控能力有些差,昨晚王者打到12点半,一点半才睡,好颓啊
Rank:1454
P1105 数列
还是因为读题,题目要求输出的是第100个数,但是我输出的是1~100个数的和。
糊涂啊。
P1106 奖学金——结构体Structural Body
1、The most important thing of this problem is array of structs.
结构体数组要注意这是一个数组,如结构体数组中下标为i的成员表示为:
Student stu[n]; stu[i].no
Notice:用数组的表示方法!!
2、指针结构体成员表示为:a->no
Notice:使用的符号是->
P1107 纪念品分组——快速排序Quick Sort
库:stdlib.h
函数:void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
base-- 指向要排序的数组的第一个元素的指针。
nitems-- 由 base 指向的数组中元素的个数。
size-- 数组中每个元素的大小,以字节为单位。
compare-- 用来比较两个元素的函数,即函数指针(回调函数)
对于函数compare
//from small to large
int compare(const void* a,const void* b)
{
return *(int *)a-*(int *)b;
}
//from large to small
int compare(const void* a,const void* b)
{
return *(int *)b-*(int *)a;
}
完了,又想完了,忍不住了,啊,啊,啊,啊,,,
P1108 守望者的逃离
emmmmmm,这道题写了太长的时间,但是总是出错,思路一点毛病没有,为什么就是错误的呢?
总结出来经验了
1、看题目,详细分析题目的要素
2、不同思路不同写法,答案错误可能是思路错误
20200217
Ranking: 1347
写一下心中的想法
P1108我写了大约十个小时,总是不对,但是我使用我的数据测试的时候并没有出现什么错误,究竟我的代码什么地方出现原因我也不是很清楚,可就不对。
期间我想放弃,总是出问题,就是找不出来,想想就来气。但是我最终还是想到了思路上的问题:是不是我的思路本身就存在问题?
思路存在问题的后果很可怕,那就是无论你怎么修改我你都不知道该怎么办。BUG永远会存在,不会消失。这恐怕就是别人常说的算法厉害的原因所在。
有的时候老想着去玩,玩着玩着发现真没有意思。回去做题,题目太难,想破脑袋还是不对,很打击人的信心。
实在做不出来了,上网去搜,去看看别人是怎么做出来的,看看别人的思路,或许这是学习的方式,这是成长的路径。
可是,看别人做出来的答案总是让我认为我太菜,比不过别人。还好我并没有自暴自弃。
写下这篇Blog的目的就是去记录自己一天天做了什么题目,有什么收获,从而提升自己的兴趣,可现实太打击人的信心了。
算了不说了,继续学习。
P1109 Hanoi双塔问题****
这个问题不想深究,太假了,明明知道递推式:
S
n
=
2
S
n
−
1
+
2
S_n=2S_{n-1}+2
Sn=2Sn−1+2,但是就是错误的。
题目中给出的最快方式不外乎就是这样的吗?
P1111 Cylinder****
不会写
P1112 一元二次方程
1、首先的,看清题目要求,考虑全面,不少流程
题目要求大小顺序,一定要排序啊。
20200218
Ranking:1323
Nothing to say, I’m busy to playing~~
Through the novel I read, which makes me know that the thought of somebody is so important.
20200220
Ranking:1323
那个努力的男孩又回来了~~
小说看的真难受啊,一目十章,垃圾网文,不看入目,但是就是有人看,这是没办法的事实。
P1113、P1115、P1116
P1110 2k进制数
1、思路真的很重要,最好在做题目的时候将思路写在一个空出来的注释区中。
P1111 Cylinder圆柱****
不会写,放在这
P1114
1、进行输出的时候要严格按照样例输出的顺序进行输出
这道题目是真的垃圾。非要按照原排列进行输出
20200222
Ranking:1222
P1118~P1124
P1117 K-进制数****
不会写
P1125 委派任务
1、根据题目写出代码
这道题目是求出最优解,我用的是枚举法。
20200222
Ranking:1053
早上10点才起,真的好晚,今天不能再这样了…
立下flag:晚上十一点半必须睡!
我真的是太粗心了~~~~
写完代码后一定要仔细读一遍看是否出现问题
P1126~P1133
P1126 字符串正反连接
1、字符串s的长度为从0~strlen(s)-1,第strlen(s)位为结束符’\0’,共有strlen(s)个元素。
P1127 尼科斯特定理
1、认真读题
题目中给的数是任意正整数,并不是任意正的奇数。
P1133 求1+2!+3!+…+N!的和
1、整型最大值:long long,共19位,最大位位9
2、是否超限
P1134 求PI
1、10的n次方表示:1en
2、到某一地方为止含义模糊呀
这道题目的为止的意思是大于10-6时,停止计算。
以表尊重,写出题目及代码和分析
题目描述
利用 pi/4=1-1/3+1/5-1/7…公式求pi的近似值,当某一项的绝对值小于10-6为止。
输出
PI的近似值 保留六位小数
分析
#include<stdio.h>
#include<math.h>
#define INN 1e-6
int main113402()
{
double sum=0,i,sign=-1,n;
for(i=0;;i++){
sign*=-1;
n=sign/(2*i+1);
if(fabs(n)<INN)
break;
sum+=n;
}
printf("%.6f", sum*4);
return 0;
}
20200223
Ranking:813
P1142~P1149
P1144 自守数问题
1、 int max:2147483647,十位数
long long max:19位数
题目中给出的最大值是20000,五位数,平方后是9位数
int型最大值为2147483647
所以使用long long型
20200224
Ranking:738
P1150~P1152
20200225
Ranking:707
P1153~P157
P1159~P1161
P1154 邮票组合问题——去除数组中相同的元素
1、如何将数组中所有相同的元素去除
P1158 作业方案调度****
P1161 回文数
1、进行N进制取数的时候,是对10进行相关的取余整除处理
20200226
Ranking:627
P1262~P1266
P1162 密码
1、使用gets()
循环读取字符串时,需要注意回车键人在缓冲区中,需要使用getchar()
进行读取
2、判断某一个数在某个范围内,使用&&
;判断某一个数是否为多个值中的一个,使用||
P1169 绝对值排序
这道题让人苦笑不得,啥子呀,为什么不能输入一行就输出一行????
20200227
Ranking:586
P1168、P1171~P1174
P1167 矩阵****
P1168 简单的计算
1、数学知识太重要了,归纳法运用的好就很棒了哦~
P1190 能量项链****
20200228
Ranking:530
P1177、P1199
P1177 三角形
1、注意递归的时间复杂度
20200229
Ranking:512
P1195、P1178、P1180、P1184、P1183、P1189、P1186
P1183 人见人爱“A+B”
1、对字符串读取的时候,%s
和%d
类似,读取缓冲区的内容,如果遇到空格或者换行符,跳过继续读取,直到非空格或着换行符才存取,直到空格或者换行符结束。
2、对%c
来说,非常特殊,' '
(space)和\n
(回车)都是字符,所以在读取的时候,会将缓冲区中之前或者当前的空格或回车读取。
3、如果想要使用%s
和%c
读取除了回车或者空格外的字符,则应在%c
前面加上。
如scanf(" %c", &c);