Hike News
Hike News

foesa的逆向

foesa的逆向尝试

第一道逆向题

大概是一道非常简单的观察题,贴出题目地址:

实验吧 逆向观察

writeup:

好像看别人的wp,说是od调试可以很快的得出答案,但是辣鸡foesa并不会,所以就用IDA调试了一波,果然是观察题啊~

把它丢进去之后就看到了,;"Good password !"

这个时候尝试一波F5,就可以看到了c代码,如下XD,就发现自己离flag近了

strcmp这个是C/C++函数,用来比较两个字符串的

设这两个字符串为str1和str2

如果str1==str2,返回0;

如果str1 < str2,返回负数;

如果str1 > str2,返回整数。

​ 这里是if内为正值的时候执行,才能得到flag,那么,!strcmp(argv[1], (&dict)[8 * i]) && !strcmp(&dest, (&dict)[8 * i])里面应该是正值,所以当两个字符串相等的时候,返回0,0的非则为正值,可以得到flag。

​ 看到前面的scr = ‘sedecrem’;等等,我这个是已经改过了之后的orz

​ 咳咳,之前scr是一串很长的数字,然后我们右键一下,然后R,可以转化为它的字符串形式,就是现在看到的sedecrem,如果你在做这道题的时候,直接把sedecrem提交上去,你会发现这是错的……如果你查一查sedecrem这个单词也是不存在的

​ 然后再看一看到底是什么毛病,我们离答案是很近了的,那让我们来查找一下这个sedecrem,打开view找到字符串,我们进行查找,输入进去,你会发现,IDA报错了,Search sting is not found,那我们想一想,这个是错的,那还有什么和它很像呢,就是把它倒过来啊,mercedes。倒过来之后我们再对它查找一波,你会发现,咦能找到啊!它大概就是答案了,输进去,ok,第一道逆向题目做出来了。

写给今天的404

今天渣浪炸了,其实想说很多,但是其实感觉对这件事情很无力。

可以很直接的说,我其实不清楚我现在的性取向是什么,不知道自己会喜欢什么样的人,不知道那个人是男生还是女生,或者其实我不会喜欢上别人,自己一个人孤独的过这一生。我之前隐晦的和爸爸妈妈有过提及这个问题,但是他们都没有给过明确的态度,可能是当我太小吧,很多我说的话他们都假装听不懂,甚至直接忽视掉,我也很想要他们理解我,但是好像太难了。

这篇来自“我的票圈”微信公众号的文章,看得我有一点泪目,生活太艰难了,我们憧憬的美好生活,好像一辈子都离我们很远很远的样子。如果这个世界上的大部分人,都能宽容一点多好啊?能宽容别人的不一样。


文章没有贴链接,因为链接打开就已经是404了,微博上只有转了很多遍的图片,微博上的#我是同性恋#这个tag也被封了,内心充斥了无数的心酸难受。因为对于我们来说,或者后来的很多人看现在,可能只是中国走了一点的弯路,但是对于现在处于这个年代的人来说,他们毁掉的就是一辈子。

我也不知道在读完这篇文章过后的你们,心里作何感想,至少在我看到微博上,同志之声被迫停止的时候,我的内心是有一些酸楚的。2003~2018,中国会变得更好吗?

我对此有些怀疑,但是当我们处于这样的和平年代之中,我还是会觉得无比的幸运,我从来不觉得中国是“你国”,也一直觉得很多人的你国言论让我感觉不舒服,我一直认为,生于中国,是一件很幸运的事。言论自由似乎已经成了空谈,一篇又一篇的文章出现着404,你可以删除微博,删除热搜,但是你不能阻止我说话。

​ 我想要的不是一个满屏404的中国。

404.pgf

文章写了一天多了,但是才放到网上去,也知道博客看的人很少,但我还是想发声。

《啊哈!算法》的阅读记录及一些尝试

排序

冒号排序

冒号排序的基本思想:每次比较两个相邻元素,如果他们的顺序错误,就把它们交换过来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>

int main()
{
int a[100];
int n;
scanf("%d",&n); //先输入将要输入数的个数
for(int i=0;i<n;i++)
scanf("%d",&a[i]);//用循环输入数组
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)//这里要想清楚为什么是n-i
{
if(a[j]<a[j+1])
{
int t=a[j];//交换数值
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}

快速排列

​ 在快排之前,要先理解一个东西,基准数,你对{10,6,3,9,1,4,2,8,5,7}这一组数快排的时候,我们选取了第一个数值作为基准数(基准数是每次都不一样的)。

​ 基准数这个东西呢,你可以选取这个数列的开头第一个,就算它是10也可以是基准数,从整个数列的最右开始,选取第一个小于10的数停下来,与这个基准数交换,那就是7了,数列变成了{7,6,3,9,1,4,2,8,5,10},再从右边开始,发现没有小于10的数了,那就说明10已经归位了。(基准数归位的一个条件是,它左边的数都小于它,右边的数都大于它)

​ 然后我们再选取7作为基准数,依旧从右开始,第一个小于7的数,找到了是5,再左边开始,找到第一个大于7的数,找到了是9,将这两个交换位置{7,6,3,5,1,4,2,8,9,10}。好的,继续我们的找数,右边从9开始,找到了第一个小于7的数,是2,左边从5开始,它和右边找到2的位置撞到了一起,这个时候就走不了了!就将2的位置和7进行交换,我们得到了这样的数列{2,6,3,5,1,4,7,8,9,10},我们检查一下7是否归位,好的,它已经归位了。

​ 后面的都是一样的,一点点的归位,最后就能得到一个从小到大的排序了~快排的每一轮的处理,就是将这一轮的基准数归位。虽然是看懂了以上的快速排列的方法了,但是就有不少的问题了。

​ 为什么从右边开始找比基准数小的数呢?这个问题其实可以分成两个问,①为什么从右边开始?②为什么要找比基准数小的数?

​ ①emmmm这个问题比较复杂,可以试一下从左边开始时,会发现最后交换基数时,排列错误,所以我们需要从基数的对面开始。

​ ②第二个问题其实很简单,我们需要把基数移到正确的位置,我们要确保基准数归位的时候,右边的数大,左边的数小。所以在将基准数归位的时候,我们找到右边的小数与左边的大数相交换,直到交换不了了,我们再与基准数交换数,更换基准数。

​ 好的,我们知道快排的基本原理了,那么为什么我们选择快排呢?当然是因为好用,其实是因为时间复杂度低,最坏的情况当然是像冒泡排序法一样的,只交换旁边两个,时间复杂度位O(N²),它的平均时间复杂度为O(NlogN)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
int a[101],n;//全局变量

void quicksort(int left,int right)//从第一个开始的话,left=0,right=n
{
int i,j,k,t,temp;
if(left>right)//左边大于右边直接return出来了
return;
temp=a[left];//temp为基准数,左边第一个数
i=left;//i为左
j=right;//j为右
while(i!=j)//未相遇
{
while(a[j]>=temp && i<j)//从右找比基准数小的数
j--;
while(a[i]<=temp && i<j)//从左找比基准数大的数
i++;
if(i<j)//两边没有相遇
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;//基准数归位

quicksort(left,i-1);//对基准数左边进行排序
quicksort(i+1,right);//对基准数右边进行排序
}
int main()
{
int i,j;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
quicksort(0,n-1);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}

栈、队列、链表

队列

​ 首先,队列是一种特殊的线性结构(线性结构就是一条,不能处理行列式之类的),只允许在队列的首部(head)进行删除和操作(这个时候其他的都没有改变),称为出队,在队列的尾部(tail)进行插入操作,称为入队。

​ 在知道这些之后,深入分析一下,一整个队列,就只有两个地方能进行处理,一个是头,另一个是尾,其他的数就好像被固定了一样,等到头(head)到达它的时候才能对它进行处理,这个时候队列的位置是没有移动的,这一点很重要,移动它将会花掉我们更多的时间,所以我们用空间换时间,以保证程序运行快。

​ 我们称为“先进先出”原则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
int a[101]={6,2,5,1,8,4,7,1,4},head,tail;
head=0;//这个时候头为0
tail=9;//尾为9,tail指向4的后面一个数
while(head!=tail)//当头尾不相连时
{
printf("%d ",a[head]);
head++;//head++在这里是让头出列,因为头已经进行了输出

a[tail]=a[head];//将新的队首加到队尾去
tail++;
head++;
}
return 0;
}

​ 用结构体来实现队列的操作(因为我自己结构体学得太差,所以看着结构体实现队列来学结构体具体用法 )在学习之前,重新捡起结构体的知识,对结构体做一个整体的框架构建吧!内容来自《C语言详解》,《C Primer Plus》。

结构体

结构声明 描述了一个结构的组织布局

1
2
3
4
5
stuct book{
char title[100];
char author[100];
float value;
};

​ 该声明表示了一个由两个字符数组和一个float类型变量组成的结构。该声明并没有创建实际的数据对象,只描述了该对象由什么组成(有时候我们也将结构声明称为模板,和c++的模板不一样)。首先是关键字struct,它表明跟在其后的是一个结构,后面是一个可选的标记(book),我们在后面的程序中可以这样声明:
struct book library
​ 这把library声明为一个使用book结构布局的结构变量。

定义结构变量
​ 结构体布局告诉编译器如何表示数据,但是没有让编译器分配空间,下一步是创建一个结构变量,即是结构的另一层含义。
声明结构体的过程和定义结构体的过程可以组合成一个步骤,如下所示,组合后的结构声明和结构变量定义不再需要使用结构体标记。

1
2
3
4
5
struct {
char title[MAXTITLE];
char author[MAXAUTL];
float value;
}library;

访问结构成员
结构体类似于一个“超级数组”,这个超级数组中,可以是各种类型的元素。如何访问结构体的成员?使用结构成员运算符——点(.)访问,ex:library.value。.比&的优先级高,所以&library.value和&(library.value)表达是一样的。如果是结构体指针,那么访问结构体指针应该使用->。

如果him==&barney,那么him->income即是barney.income

如果him==&fellow[0],那么him->income即是fellow[0].income

结构类型 一种针对记录得数据类型,该记录由多个成员组成

结构类型plant_t有5个不同的成员:一个是字符数组类型,一个是int类型,其他三个为double类型。

1
2
3
4
5
6
7
#define STRSIZ 10
typedef struct{
char name[STRSIZ];
double diameter;
int moons;
double orbit_time,rotation_time;
}plant_t;

声明结构体数组

​ 一个例子:struct book library[MAXBKS];

​ 代码把libray声明为一个内含MAXBKS个元素的数组。数组的每个元素都是一个book类型的数组。因此,library[0]是第一个book类型的结构变量……数组名library本身不是结构名,它是一个数名,该数组中的每个元素都是struct book类型的结构变量。

标识结构数组的成员

1
2
3
4
library             //一个book结构的数组
library[2] //一个数组元素,该元素为book类型
library[2].title //一个char数组(library[2]的titlt成员)
library[2].title[4] //数组中library[2]元素的title成员的一个字符

结构体实现队列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
//定义结构体
struct queue
{
int data[100];//整个数组的长度
int head;//队头
int tail;//对尾
};

int main()
{
struct queue q;//声明结构体
q.head=1;
q.tail=1;//初始化数据
for(int i=0;i<9;i++)
{
scanf("%d",&q.data[q.tail]);
q.tail++;
}
while(q.tail!=q.head)//队列不为空时执行循环
{
printf("%d "q.data[q.head]);//打印出队首
q.head++;//将队首移出队

q.data[q.tail]=q.data[q.head];//将新队首的值添加到队尾
q.tail++;
q.head++;//将队首出队
}
getchar();
getchar();
return 0;
}

了解什么是栈吧,栈就是先进后出的数据结构,它可以用来判断是否为回文,代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <string.h>

int main()
{
char a[101],s[101];
int len,mid,next,top;
gets(a);//读入一行字符串
len=strlen(a);//求字符串的长度
mid=len/2-1;//这里不是求字符串的中点,虽然书上是这么写的

top=0;//栈的初始化
//将mid前的字符依此入栈
for(int i=0;i<=mid;i++)
s[++top]=a[i];//将mid前的数都存入s数组中
//判断字符串的长度是奇数还是偶数,并找出需要进行字符匹配的起始下标
if(len%2==0)
next=mid+1;
else
next=mid+2;
//匹配开始
for(int i=next;i<=len-1;i++)
{
if(a[i]!=s[top])//将s数组中的数与min后的数进行对比
break;
top--;
}
//如果top的值为0,表示所有的字符都被一一匹配了
if(top==0)
printf("OK");
else
printf("Sorry");
getchar();
getchar();
return 0;
}

​ 其实栈的使用是很简单的,主要是要注意它只有一边是可以移动的,那就是top,也就是离桶低最远的那一个是可以动的。

链表

​ 在学链表之前先用一段代码来回顾一下指针的内容,malloc是为指针分配内存空间地址,但是我们可能不知道我所定义的类型需要多大的空间,就用sizeof()来计算大小,分配给改类型的指针!不要忘记加括号!

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;//定义一个int类型的指针
p=(int*)malloc(sizeof(int));//指针p获取动态分配的内存空间地址
*p=10;//向指针p所指向的内存空间中存入10
printf("%d",*p);
getchar();
getchar();
return 0;
}

​ 接下来就是往数里面插入一些数了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>

struct node//声明结构体
{
int data;
struct node *next;//next表示node这种结构体类型的指针
};

int main()
{
struct node *head,*p,*q,*t;
int n,a;
scanf("%d",&n);
head=NULL;//空指针
for(int i=0;i<n;i++)
{
scanf("%d",&a);
p=(struct node*)malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
if(head==NULL)
head=p;
else
p->next=p;
q=p;
}
scanf("%d",&a);
t=head;
while(t!=NULL)
{
if(t->nxt==NULL||t->next->data->a)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t->next;
t->next=p;
break;
}
t=t->next;
}
t=head;
while(t!=NULL)
{
printf("%d",t->data);
t=t->next;
}
getchar();
getchar();
return 0;
}

About Today

​ 今天是很难过的一天。

早上上完近代史的那节课之后,突然得知了霍金先生去世的事情,真的是一下子,感觉情绪变得很难过了。给sin鱼发了一条消息,她给我打了电话,短短几分钟,听到了她话里的哽咽······我一直在脑海中觉得,他不会老去,不会死去,当他在微博上回复网友的留言时,感觉和他的距离一下子拉近了。虽然我对霍金先生的了解很少,只是看过一些他所提出的理论,看过他写的《时间简史》,但是突然一下子,这个世界失去了一个探索真相的人,失去了一个物理界的顶尖人物。

很难以去描述和表达我的心情,这是一种很微妙的感觉,大概只有此刻的我能够懂我自己吧,这样说可能会被很多人喷跟风,所以就自己在博客里面写写吧。

另外一个大概就是我自己的心情问题了,太容易被别人影响,尤其是别人对我的看法,我也知道自己不应该这么想自己,也要觉得自己很棒棒。就还是会很烦躁,可能是自己没能达到自己的预期吧,觉得自己有一点太急于求成了,想要收获更多,那就要付出更多,不是简简单单几天或者是几个月的努力能够达到的。

虽然经常被别人比较,因为被比较而感到自己很差劲这真的很正常,因为这个世界上的人厉害的人多了去了,你要做的不是比谁谁谁更好,你要做的是比以前的那个你更好。所以呢,就放宽心,去做自己吧!只要你能做到自己,不在乎别人的看法,这就已经很厉害了呢(✿◡‿◡)

想想你究竟想要成为什么样的人,想想你的理想是什么,想想你未来要过怎么样的生活,来大学,是来读大学的,也是来学习知识的。不能被眼前的事情所迷惑,不要拿金钱去换时间,因为现在你所缺的不是金钱,而是时间。你需要更多的时间去充实你自己,去填充你自己,去让自己人生这条路上少一些空白,多一些五彩斑斓的色彩,你可以做到的对吗?

不要怕路上别人说话的声音,只要你跑得够快,就只能听见风的声音。

foesa你真的是很棒很棒的人啊!
φ(゜▽゜*)♪

杭电oj刷题遇到的问题

[2000]ASCII码排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>

int main()
{
char ch[3],temp;
while(scanf("%c%c%c",&ch[0],&ch[1],&ch[2])!=EOF)
/*从标准输入输入字符,直到遇到结束符为止*/
/*EOF是一个宏,代表文件结束,意思就是只要拿到的字符不是EOF就继续循环*/
/*题目所要表达的意思,多看一下F.A.Q里面有解释,底下也写了一点,虽然是copy的*/
{
getchar();
/*在输入的时候会将换行输入进去,不加getchar()会出错*/
/*在后面解释为什么*/
if(ch[0]>ch[2])
{
temp=ch[0];
ch[0]=ch[2];
ch[2]=temp;
}
if(ch[1]>ch[2])
{
temp=ch[1];
ch[1]=ch[2];
ch[2]=temp;
}
if(ch[0]>ch[1])
{
temp=ch[1];
ch[1]=ch[0];
ch[0]=temp;
}
printf("%c %c %c\n",ch[0],ch[1],ch[2]);
}
return 0;
}

​ ①原因是while判断里没有加 !=EOF,所以程序其实不会结束(如果用数据文件作为输入的话能够看出),scanf函数返回的是输入的数据的个数,什么都不输入代表-1。

如果按ctrl+Z 那么scanf函数返回-1,按ctrl+c是强行终止,至于while(scanf("%d %d",&a,&b)!=EOF)为什么也有这个效果,原因是一样的。

EOF = -1,EOF代表文件结束符,如果运行时 这样 ./2 < data.txt,即以数据文件作为输入,且此时你的程序中没有加上scanf()!=EOF判断的话,程序会一直跑下去,不会停止,所以需要加上EOF判断,这样提交就AC了。

​ ②输入的换行符没有吸收,下次scanf的时候会读取换行符。
比如你输入asd(Enter)键,scanf后那个enter键还保留在缓冲中,下次scanf的时候会读取。

[2001]计算两点间的距离

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <math.h>

int main()
{
double x1,x2,y1,y2;
/*定义为int型会Output Limit Exceeded,尽量用double类型*/
while(scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)!=EOF)
/*前面改了后面也要改啊*/
{
printf("%.2f\n",(float)sqrt(pow(x1-x2,2)+pow(y1-y2,2)));
}
/*sqrt为开平方根pow为幂函数*/
return 0;
}

这道题主要错在没看题orz我大概是个傻子

[2005]第几天

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main()
{
int y,m,d,day;
while(scanf("%d/%d/%d",&y,&m,&d)!=EOF)
{
day=0;
int y1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int y2[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!=0)||(y%400==0))
{
for(int i=1;i<m;i++)
day=day+y1[i];
}
else
for(int i=1;i<m;i++)
day=day+y2[i];
printf("%d\n",day+d);
}
return 0;
}

这道WA了两次,第一次是在对年份的判断上面,这个错的太傻了,闰年的条件是能被4整除不能被100整除,或者能被400整除(~ ̄(OO) ̄)ブ然后傻乎乎的跪了。

第二次emmmm挂的原因是,我的天数输出了两次,在循环里面printf肯定会导致多次输出啊!!!又一次被自己傻哭,后面改了就好了┭┮﹏┭┮

[2006]求奇数的乘积

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main()
{
int n,a,s;
while(scanf("%d",&n)!=EOF)
{
s=1;
for(int i=0;i<n;i++)
{
scanf("%d",&a);
if(a%2!=0)
s=s*a;
}
printf("%d\n",s);
}
return 0;
}

题目提交的时候倒是一次就过了,但是在底下调试的时候,老是不能输出东西。第一是我没理解题目的意思,它的意思是第一个scanf的数确定了这一行的数一共有多少,我忽略了这一点。第二是我在while后面顺手打了“;“我是在想些什么啊??气气气

[2007]平方和与立方和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
int main()
{
int n,m,x,y,t;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n>m)
{
t=n;
n=m;
m=t;
}
x=0;
y=0;
for(int i=n;i<=m;i++)
{
if(i%2==0)
x+=i*i;
else
y+=i*i*i;
}
printf("%d %d\n",x,y);
}

return 0;
}

先说说这道题的坑吧!!(掉到绝望

由两个整数m和n组成这句很重要,它没有告诉你n,m这两个整数的大小,很容易就直接拿n<m来做题了,惯性思维不行啊!

②关于函数pow(x,y),在你不熟悉这个函数之前不要乱用啊!怎么用怎么错!pow(5,3)=124!(这个原理是什么我还没有查相关资料)

这道题让我很绝望,不知道搞了多久o(一︿一+)o

[2008]数值统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
int main()
{
float num;
int a,b,c,n;
while(scanf("%d",&n)!=EOF&&n!=0&&n<100)
{
a=0;
b=0;
c=0;
for(int i=0;i<n;i++)
{
scanf("%f",&num);
if(num<0)
a++;
if(num==0)
b++;
if(num>0)
c++;
}
printf("%d %d %d\n",a,b,c);
}
return 0;
}

​ 这道题是真的很简单的那种题目了,其实第一次写出来的代码只是num的类型选择的是int型,但是题目要求判断的是数值的正负零,结果······我大概是傻逼了,第二次第三次改都没有注意到题目给的例子里面有0.5,整个foesa都不太好QAQ第四次直接WA掉,第五次又改成了和第二次一样的,我怕不是个傻子哦!!!极度的难过o(;′⌒`)

[2010]水仙花数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>

int main()
{
int m,n,j,flag;
while(scanf("%d %d",&m,&n)!=EOF&&m>=100&&m<=999&&n>=100&&n<=999)
{
flag=0;
for(int i=m;i<=n;i++)
{
int c=i%10;
int b=(i/10)%10;
int a=i/100;
if(i==a*a*a+b*b*b+c*c*c)
{
flag++;
if(flag==1)
{
printf("%d",i);
}
else
printf(" %d",i);
}
}
if(flag==0)
printf("no");
printf("\n");
}
return 0;
}

​ 先说说我的第一次想法吧,毕竟不是第一次写水仙花数,输出水仙花数其实不是很难,主要是被给定的范围不存在水仙花数输出no给蒙着了,第一次的代码想要用数组来记录水仙花数,用flag记一共有多少个水仙花数,如果没有水仙花数,flag==0的时候就直接printf("no\n");后面发现,为了不多输出空格,要让输出的数字不带前面的空格······心态爆炸

所以这道题虽然只提交了两次,但是花的时间很多,好不容易被AC,大概这就是ACM竞赛的乐趣吧,虽然我可能不怎么有可能参加ACM竞赛啦,但是在偶尔做一下oj还是很有意思的hhhhh努力的提高自己的编程能力吧~

周末干些什么

​ foesa的平时生活大概就是跟着老师上课,然后下来会去图书馆学习什么的(寝室看不进去书啊),但是我又很想享受大学生活。我的选修课养生哲学的老师说得很对,大学如果没有自由,那么它和高中的区别又是什么呢?大学不应该是死读书的地方,在学习充实自己的同时,也不能忘记享用自己的空闲时间。

​ 在想清楚这件事情之后,foesa就开始了自己想要的生活方式,过自己想要的生活,第一件事情,就是上个学期答应自己的事情,每个星期读一本书,并且写读书笔记。这个事情没有听起来那么难,因为只要你每个星期花上2~5个小时就能读完一本书,所以我把这件事情安排到了星期六。

​ 但是毕竟一个星期五天的时间,每天睡眠时间大概在6~8个小时,很少有时间能够超过7个小时的!所以我星期六的早上就准备睡一大早上emmm,本来是想要睡到9点,但是上了网球的体育课,觉得自己还是要拿点时间来运动,所以修改一下起床时间,7:30起床,去打网球。

​ 等到9:30或者10点的时候,收拾收拾自己再去西西弗书店(其实我也想去其他书店,但是好像都好远啊,回学校太不方便了,我又是一个人),看一本书,然后是要写读书笔记的(我觉得这是我的一个执念,也是我对自己的一个要求)。

​ 星期六的晚上就是电影了,准备一个星期一部电影,也是要写影评,本来2018年是想要专门做一个影评的手账本,但是因为我现在用的灯塔的本子感觉很难用完,如果仅仅是写日常生活和做拼贴的话,估计到年末也只会写到2/3。电影的话,想要找一点得过奥斯卡的影片,短不短不重要,重要的是里面所表达的内容,在看之前也别看什么豆瓣评分和豆瓣的影评~

​ 星期天就是旅游的时间,我意义上的旅游,不是去太远的地方,而是什么公园或者博物馆之类的,也可以打卡网红店,去吃东西,去喝咖啡……因为太喜欢去探索未知的地方了,所以,就让我这么任性这三年半吧!如果有比较长的假期,想要去苏州或者上海玩,甚至是天津……(如果一个人的话不知道爸妈能不能答应啊!)

下面是我的照片时刻~虽然是手机拍的╰( ̄ω ̄o)但是自我感觉还是挺良好的~
Daily life

这张照片来自寝室,蔬果汁hhhhh沉迷于各种水果无法自拔,虽然真的可能花钱太多了QAQ但是我还是好喜欢吃水果的~(其实也是上了大学才各种爱吃水果

Saturday life

其实这张照片是周五拍的,因为周五的下午空掉了,那天早上的课太水了,我又不想学习,就说那就出去看电影吧,单枪匹马去了天街,电影开场比较晚,我就决定去书店看书hhh把周六要干的事情全部做完了(就是懒到现在都还没有写读书笔记)。结果这个星期六就被我挪出来学习了,美滋滋~

Sunday life part 1
Sunday life part 2

去全世界看看,真的感觉过得好开心的,去了创意设计中心,也去了浙江博物馆和西泠印社,真的是很累的一天,但也是很满足的一天。累到回寝室啥也没干就睡了,睡了一个半小时,感觉全身都舒服很多很多hhhhh

周末,一个人,也要过得有声有色!

2018年新学期规划

可以说算是回学校的前一天了(虽然我是后天大早上的高铁回去),也正好是3月的第一天,虽然之前有理过规划,但是想着规划这种东西需要别人的监督(只是也没人看我的博客啊)就准备详细的写一个自己的规划吧~嘿嘿嘿,随便乱看看啦~

首先在开始新学期之前,要先把小说和游戏的瘾给灭了〒▽〒,还有要开始调整自己的睡眠时间了,一个假期浪过来,生物钟已经难以吐槽了。然后就是要严格按照自己的规划内容行事,答应自己的事情就一定要办到最好。咳咳,废话不多说,把规划先摆出来。

​ 1、每星期(周六)去西西弗读一本书并写读书笔记

​ 2、每天背百词斩六级词汇20个,听一篇10min以上的英语TED演讲

​ 3、隔一天做一篇六级真题的阅读和写作

​ 4、上课认真听课手机关机,打印出课表并戴手表(附上我的课表)

​ 5、周三、周五、周日泡图书馆学高数,离散,JAVA

​ 6、下午2:00酸奶+燕麦片

​ 7、水果蔬菜汁争取每天喝(●’◡’●)

​ 8、00:00前睡觉&6:30起床/6:00起床阳光长跑(跑到+5)

​ 9、每晚21:00keep运动15—20min

​ 10、每隔两天打电话给爸妈哟~

关于我的手帐

手帐概述

​ 手帐有很多很多的定义,先引用一个百度上的对于手帐(手账)的定义。

手账,指用于记事的本子。写东西。在日本,大部分人都会随身带着一个被称为“手账”的笔记本,随时随地掏出来翻翻看,或者在上面记些什么。
能提醒自己记着家人、朋友的生日和约会,还能安排每天的工作,很多人把它当做简短的日记本。

​ 但是其实这只是个大概的定义,看了百度的定义,你也很难以说到底什么是手帐对吧?其实我对于手帐的理解就是生活,它可以是简单的,几句话潦草的,也可以是被精心雕琢的。一个本子的内容可以很多,多到你所有的生活:关于未来的规划、关于朋友的生日、关于你的睡眠记录、关于你的习惯坚持、关于你的内心难以言说的话、关于你的梦想……所以我理解上,手帐就是你的生活(不是说手帐一定代表了生活,没有用手帐的人就没有生活),用手帐你可以更好的规划,以及使用你的时间,看出你的改变。

​ 在入了手帐这个大坑的两年的时间内,我用了好多的本子,第一本印象很深,是本子事多的活页本,当时买了很多种类的内页,但是因为是高二下的样子才开始写手帐的,所以觉得时间很紧迫,开始高考倒计时318天的时候暂停了手帐。

​ 第二、第三本和手帐算是有点关系的,是我的规划本,规划本用了两本,从高三的某一天开始(翻了一下本子是2016-09-05,距高考还有274天),一直写到高中毕业,最开始还是一个人写,后来因为班主任的建议和一个同样写规划本超级可爱的蓓蓓交换批改,现在看着留下了很深很深的回忆。规划本用的是一个不知名牌子的活页本,和无印良品透明的活页本(现在我只有那个不知名牌子的活页本,另一个本子在她手里面,她的本子在我的手里面)。

​ 第四个本子忘记放在哪里了,找了半天没找到,里面是空白的本子,最开始是抱着高考毕业一定要用它来写的想法,结果里面是空白本啊,太不好掌握了φ(* ̄0 ̄),最后只能放弃了那个本子……

​ 第五个本子入了灯塔黑色A5软皮,本子只有120页,算是比较薄,但是我贴了许多东西,所以看着有一点爆本了,这个本子大概是记录了从2017-09-16收拾东西,到2017年年末,这么三个月的事情(其实本来是写不完的,后面贴照片给写完了)2017年真的是很难以言喻的一年啊,从高中走向大学,从17岁走向18岁。

​ 后来,买了好多的本子……

​ 然后就给自己理了一个2018手帐计划:

我的字很丑,将就着看吧

​ 我准备的是以下几个本子:
趁早 读书笔记&国誉方格本

灯塔横格&灯塔点阵

我的手帐回顾

第一本手帐

​ 这是我的第一本手帐的第一页,当时真的初生牛犊不怕虎,梦想是浙江大学,想着我考出来的高考分数,和浙江大学差了有100多分,我是真的不想吐槽!但是那个时候的我真的是超级天真了hhh也很羡慕那个时候天真的我!

这一面有点印象深刻,那个时候是高二,期中考试考出来自己和班上的学霸差距很大,感觉各种的不开心,然后会往手帐里面写很多很多鼓励自己的话,也可以叫毒鸡汤。我特别的爱喝鸡汤,也会经常的鼓励自己,后面还被蓓蓓吐槽hhhh

这是当时的我,最喜欢的一面手帐,但其实现在看起来真的一点都不好看啊!据高考还有343天,也可说算是我第一本手帐的最后一篇,就到了下一个本子了!

第二、第三本手帐

​ 第二本手帐就更加简单了,就是每天需要完成的任务还有和蓓蓓相互鼓励的话,到了寒假,还给自己准备了很周密的计划,每一个计划的背后,都是艰苦的高三生活。虽然当时觉得高三生活压力超级大,但是现在看来,其实度过了那么多天,做了那么多事情,每一天都超级充实,觉得生活真的很简单啊!

​ 那个时候也发生了很多很多事情,经常会在本子里面碎碎念,不愉快的事情,开心的事情,什么都说,成绩偶尔也会记录在这个本子上。本子上也有我们两个互相给对方出题,也有背诵默写的古诗词,有时候为了装扮本子,也会在本子上贴很多很多很好看的胶带,贴画,还有上课睡觉的证据。

​ 因为没有找蓓蓓说,没经过她的同意,所以就不放蓓蓓规划本的照片啦,只有我自己的丑字,但是也能在我的规划本里面看到她的批阅啦!(除第一张外,一般来说红笔是她)






第四本手帐

​ 哇,我不知道放在哪里去了,如果找到了,到时候再补吧~

第五本手帐

​ 第五本手帐是大学生活的开始,写了很多乱七八糟的东西,包括影评之类的(没有读书笔记,因为专门准备了一个本子做读书笔记本),有一段时间学生会工作太忙了,也空窗了很长的一段时间。

就不啰嗦那么多了,直接上图吧hhhh因为故事都在图里面o( ̄▽ ̄)o

一大大大波图来袭














第六本手帐

先拿我2018年手帐的第一页goal秀一下,其实是没准备考雅思和托福的hhh其他的只能说是尽我所能吧~加油的2018年啊!2018年因为春节去老家过,所以快有半个月的时间没有写过手帐了。我是真的太懒了啊!






第七本手帐

第七本手帐是bujo,子弹手帐,和规划本的功能很像,就是提前一天睡前写好任务,然后第二天再一个个勾掉完成的任务啦(●’◡’●)







怎么让自己的手帐变得漂亮

图片随手拍的,这个可以算是我出去玩或者旅游,除了带本子和一颗热爱玩的心之外,写手帐必带的东西,当然我拥有的总的笔不是图上那么一点hhhh感觉美滋滋的!

咳咳,我先来介绍一下第一张图是些什么,左上角第一个蓝色的,看起来像改正带的东西,是点点胶,反正把它当作胶水就好了,有点像双面胶,但是更好用。上面一排,都是胶带,左边那种叫做胶带的分装,方便出行,右边的就是胶带啦,各个样子款式都有,可以帮助你的手帐排版,也可以让你的手帐更有感觉。除了笔、橡皮、剪刀、尺子之外的,是便签本和贴纸,便签纸的用处很多,怎么贴要自己去发掘各种玩法hhhh

对我的各种颜色的笔,来一个介绍吧!左边5只都是荧光笔,3只白色壳子的是日本斑马家的,灰色那只笔想不起来是哪家的了,亮黄色那只是无印良品的,都很好用~中间那9只彩笔看着很扎眼对不对?慕娜美家的彩笔,既好用又便宜,买多少都不觉得贵,它家的颜色还很多,出水也很稳定,只是笔头容易秃,用的时候要轻轻的,别太用力。右边那一堆乱七八糟的笔,有pilot,斑马,无印良品家的,这个说不清楚哪一个好用,我觉得都很ok啦!最右边两只,樱花的勾线笔,非常的常用,画线很棒~

这张图片来自我的寝室,买了一专门的胶带收纳架,其实现在以及快放不下胶带了QAQ因为买的胶带实在是太多了!日常沉迷于各种胶带中,有很多牌子的,日产国产什么都有。然后看不到的地方,还有印章、火漆章、彩墨、艺术钢笔、打印的素材……手帐的坑真是非常非常的大,想要跳坑,一定要有坚持下去的毅力,还有随时准备学各种技能的时间。说起来,我还要学水彩画,捡回我快忘记的素描啦!

关于我的影评

首先,一定要强调一点,我的影评,包括评分全部都是个人想法,也有一部分影评摘抄于豆瓣或者其他地方,因为是自己的本子上,所以没有标注原作者,如果有侵权,我马上删掉。评分的话,纯属评着玩,如果有你很喜欢的电影被评了比较低的分数QAQ也别怪我,只是一个个人想法啦!






最后啦

谢谢你能看到最后啦~

噫,恭喜你点开foesa的博客

​ 因为学校的寒假学术竞赛,在@codgician的帮助下,搭建好了自己的博客,作为一个完全的萌新……真的很心酸啊!!

​ 这个假期是有很多想做的事情的,虽然有时候计划赶不上变化(我就是懒!),但是好歹还是做了几件事情的。也是一些原因吧,感觉自己之前到现在和以前变化其实挺大的,不知道是不是因为上了大学,或者是满18岁,或者是一些外界因素,这个假期思考了很多东西。

​ 我自己是一个不完全的理科生(我有毒),特别特别的文艺,更偏向一点文科生吧!喜欢很多奇奇怪怪的东西,比如手帐啊,做饭啊,古琴啊,画画啊(不是我说,画得真的难看),喜欢的东西很多很广泛,日常就是刷微博,看视频,偶尔开个黑。接触编程也是从高三毕业的暑假,知道被信息安全录取的时候才开始的,现在想想一个学期就过去了啊,真的太快了(ORZ感觉自己还处于什么都不会的状态),马上就要大一下了。

​ 在大一下给自己安排了很满的课表,真的是要很努力的学习了,不能再重复大一上的惨剧TAT,还有看书什么的,也给自己安排了计划,不能再计划赶不上变化了!学生会的工作啊,下个学期好像我们部门就不是重点了,所以有更多的时间去图书馆学习了。

​ 这个博客的话,大概就是我碎碎念的地方,有时候会发一些自己的手帐啊,影评啊,书评啊之类的,而且知道这个博客的人没几个,我也可以找个地方来发泄自己的不满什么的,至于学术内容,现在是真的啥都不会,所以应该几乎不会在上面写编程方面的东西。未来的话不出意外还是会写一些的。(✿◕‿◕✿)

​ ​ 愿2018及以后,能做自己喜欢的事情。

你为什么要那么努力?
因为我喜欢的东西都很贵,我想去的地方都很远,我爱的人超完美