OJ Blog 2月

这是一篇记录博主2月份在OJ(在线编程平台)上解决问题的日志。博主每天都在尝试不同的编程题目,涉及到C语言、字符串处理、动态规划、数学算法等多个方面。在解决问题的过程中,博主分享了遇到的难点、学习到的新知识和编程技巧,如处理输入输出、动态规划、数值计算等,并强调了英语阅读能力和仔细读题的重要性。
摘要由CSDN通过智能技术生成

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=2Sn1+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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值