“一颗咸鸭蛋”通过精心收集,向本站投稿了8篇九度笔记之 项目安排,下面是小编整理后的九度笔记之 项目安排,欢迎大家阅读借鉴,并有积极分享。

九度笔记之 项目安排

篇1:九度笔记之 项目安排

题目描述:

小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的,由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行,即两个项目之间不能有时间重叠,但是一个项目刚结束,就可以立即做另一个项目,即项目起止时间点可以重叠)。

输入:

输入可能包含多个测试样例。

对于每个测试案例,输入的第一行是一个整数n(1<=n<=10000):代表小明手中的项目个数。

接下来共有n行,每行有3个整数st、ed、val,分别表示项目的开始、截至时间和项目的报酬,相邻两数之间用空格隔开。

st、ed、value取值均在32位有符号整数(int)的范围内,输入数据保证所有数据的value总和也在int范围内。

输出:

对应每个测试案例,输出小明可以获得的最大报酬。

样例输入:

3

1 3 6

4 8 9

2 5 16

4

1 14 10

5 20 15

15 20 8

18 22 12样例输出:

16

22算法分析

本题采用回溯法,假定安排了第k个项目后,下一个项目的开始时间肯定在k个项目时间的结束之后。

数据结构

Project

Id

int

代表项目名

Order

int

代表按照项目的开始时间排序后,该项目的序号,从0开始

btime

int

项目起始时间

etime

int

项目结束时间

pf

int

项目收益

在回溯过程中需要查找某个项目的next项目和adjacent项目,为了加快计算速度,所以提前对项目按照开始时间进行排序。

Next项目指某个项目做完后可以接着做的项目

Adjacent项目是指比某个项目开始时间相同或晚一些的项目

现在来讲述具体算法流程

void manageP(int curOrder,int curpf,const std::vector

&pv)

pv为已经排好序的项目列表

假定已经安排了几个项目,最后一个为curOrder(排序序列号), 求得curOrder的Next项目nextOrder

(1)将nextOrder放入计划。

manageP(nextOrder,curpf+pv.at(nextOrder).pf,pv);

在此要判断nextOrder是否存在,也就是计划是否已经满了,是的话就比较当前的获益,如果比allpf大,就更新allpf.

(2)不加入nextOrder,而是加入nextOrder的adjacentOrder

manageP(adjacentOrder,curpf+pv.at(adjacentOrder).pf,pv);

在此也要判断nextOrder是否是最后一个项目,如果是的话就不存在adjacentOrder,计划已经结束,判断当前收益是否大于allpf.

我们还需要考虑另外一种情况,adjacentOrder的开始时间>=nextOrder的结束时间

在这种情况下得到的收益肯定不是最大,因为中间可以插入nextOrder项目

代码

[cpp]

// test1499.cpp : 定义控制台应用程序的入口点。

//

#include “stdafx.h”

#include

#include

#include

struct Project{

int id;

int order;//记录排序后的位置,便于搜寻下一个项目

int btime;

int etime;

int pf;

};

//std::vector

userp;

int allpf=0;//盈利

bool lessthan(const Project &a,const Project &b){

return a.btime < b.btime;

}

int getNextP(int curOrder,const std::vector

&pv){//得到和项目cur时间不重叠的下一个项目

if(curOrder==-1)

return 0;

std::vector

::const_iterator cit = pv.begin + curOrder +1;

for(;cit!=pv.end();cit++){

if(cit->btime >= pv.at(curOrder).etime){

return cit->order;

}

}

if(cit==pv.end()){

return -1;

}

}

/*

int getAdjacentP(const Project &cur, const std::vector

&pv){//得到开始时间在项目cur开始时间之后或重合的下一个项目

if(cur.order == pv.size()-1)

return 0;

else

return cur.order+1;

}

*/

void manageP(int curOrder,int curpf,const std::vector

&pv){//已经加入了k-1个项目,k-1为cur项目

//加入

int nextOrder;

nextOrder = getNextP(curOrder,pv);

if(nextOrder==-1){

if(curpf>allpf)

allpf = curpf;

return;

}else{

manageP(nextOrder,curpf+pv.at(nextOrder).pf,pv);

}

if(nextOrder == pv.size()-1){                      //nextOrder是最后一个项目

if(curpf+pv.at(nextOrder).pf > allpf){

allpf = curpf+pv.at(nextOrder).pf;

return;

}

}else{

int adjacentOrder = nextOrder+1;

if(pv.at(adjacentOrder).btime >= pv.at(nextOrder).etime){ //adjacentOrder开始时间在nextOrder结束时间之后

//得到的利润肯定没有 加上nextOrder的多

return;

}else{

manageP(adjacentOrder,curpf+pv.at(adjacentOrder).pf,pv);

}

}

}

void test1499(int n){

int i = 0;

Project p;

std::vector

pv;

while(i++

std::cin>>p.btime>>p.etime>>p.pf;

p.id = i;

p.order = 0;

pv.push_back(p);

}

std::sort(pv.begin(),pv.end(),lessthan);

for(std::vector

::size_type st = 0;st

pv.at(st).order = st;

}

manageP(-1,0,pv);

std::cout<

}

int _tmain(int argc, _TCHAR* argv[])

{

int n =0;

while(std::cin>>n){

test1499( n);

}

return 0;

}

// test1499.cpp : 定义控制台应用程序的入口点,

//

#include “stdafx.h”

#include

#include

#include

struct Project{

int id;

int order;//记录排序后的位置,便于搜寻下一个项目

int btime;

int etime;

int pf;

};

//std::vector

userp;

int allpf=0;//盈利

bool lessthan(const Project &a,const Project &b){

篇2:九度笔记之 1252:回文子串

题目描述:

输入一个字符串,输出该字符串中对称的子字符串的最大长度,

比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。

输入:

存在多组数据,每组数据一行字符串,长度不大于100。

输出:

输出回文子串的最大长度。

样例输入:

google

样例输出:

4

算法分析:

本来打算用《最长合法括号序列1》中的算法,利用动态规划做,但是对于例如“aaa”的情况该算法就无效了

因为括号必须是左右一对同时出现,左边的必为”(“,右边的必为”)“,所以当出现str[pos]==”(”或 str[sympos]<0 或str[sympos]==”)”的情况时,str[pos]位置的符号不可能再和dp[pos-1]合法子括号序列的子字符串构成合法括号序列。

(()(

)()(

())

)())

对于回文字符串,则会出现以下情况

aaa

dp[1]=2 ,

pos==2时,sympos== -1,得到dp[pos]=1 实际上dp[pos]=3

因为a[1]相当于一个回文字符串,str[0]==str[2],dp[pos]=3

abadabad

dp[6]=7,

pos==8时,sympos== -1,得到dp[pos]=1 实际上dp[pos]=5

因为abadaba中的子字符串aba为一个回文字符串,str[3]==str[7],故dp[pos]=5

公共子序列查找

新的思路就是,如果字符串s中含有回文字符串,回文字符串一定为该字符串的逆序列rs和该字符串s的公共子序列,如下所示。

google       s

elgoog     sr

abamngnm   s

mngnmaba  sr

mngnmaba      sr

算法实现就很简单了,从sr的某个位置开始,s从0开始逐个字符比较,记录最长的公共序列。

源代码:

程序中需要注意的是srbegin的每次循环,temLen都要重新置为0

srid的每次循环结束后,也要判断一下temLen和maxLen的大小,

google     s

elgoog      sr

在sid==3,srid==5时,

sr.at(srid)==s.at(sid)

temLen++;

srid++;sid++;

循环退出,此时temLen==4,maxLen==0

还有就是考虑到sr需要前向错位,后向错位来比较,所以需要将s,sr反过来比较一下。参看int getMaxNum(std::string &s)

?

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

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

#include

#include

using namespace std;

int getMaxNum(std::string &s,std::string &sr){

int sLen = s.size();

int maxLen = 0;

int temLen = 0;

/*

*  google  s

* elgoog   sr

*/

/*

* abacdefgfedcmnm

* mnmcdefgfedcaba

*/

int srbegin = 0;

while(srbegin < sLen){// sr start from i compare s

int srid = srbegin;

int sid = 0;

temLen = 0; //attention

while(srid < sLen){

if(sr.at(srid)==s.at(sid)){

temLen++;

}else{

if(temLen > maxLen)

maxLen = temLen;

temLen=0;

//break;

}

srid++;

sid++;

}//while(srid < sLen)

if(temLen>maxLen)    //attention srid==sLen must be considered for “google”

maxLen = temLen;

srbegin++;

}

return maxLen;

}

int getMaxNum(std::string &s){

std::string sr(s.rbegin(),s.rend());

int maxLen = 0;

maxLen = getMaxNum(s,sr);

int rMaxLen = getMaxNum(sr,s);

if(rMaxLen>maxLen)

return rMaxLen;

else

return maxLen;

}

void test(){

std::string s = “ab”;

std::string sr(s.rbegin(),s.rend());

std::cout<<

}

void judo(){

std::string s;

//int temLen = 0;

while(std::cin>>s){

std::cout<<

}

}

int main() {

//cout << “!!!Hello World!!!” << endl; // prints !!!Hello World!!!

judo();

return 0;

}

/**************************************************************

Problem: 1252

User: KES

Language: C++

Result: Accepted

Time:10 ms

Memory:1520 kb

****************************************************************/

篇3:“笔记”之死得其所

九度笔记之 项目安排

“笔记”之死得其所

中午,我去买了支笔芯,写起了日记。刚开始还满好的,可是好景不长任性的笔芯,它却不奉献了――故意不捐“血”――写不出字。

我给它戴上“保护盖”和“帽子”好,我虐待似的.把它“倒立”――笔尖朝下只敲,看能否有效。我一试,它像怕我似的“大出血”。可一会儿又开始反抗了,我把全身的力量转向右手,用力一敲。我正心想它应该会乖乖的听话了吧,谁知道笔尖和身子一分为二了!唉,怎么又坏了。可“死”也死的光荣,如人死了可以捐器官,它死了就可以把“衣服”留给后来人。

然后,以中国化的形式把它勾勒出,再加以装饰打扮,一个个颇具高贵品质的梅,松,竹,菊都问世了!

我想这就是“死得其所”了吧!

相关专题:尚无数据

篇4:Linux学习笔记之――Linux相关

简单的来说,操作系统主要分为两个东西,一个是内核、一个是一堆核心提供的工具、这一堆工具组成的就是所谓的操作系统。

内核负责控制硬件资源分配,而如果只有内核,则只能让计算机硬件运行,而不能有任何功能,因此需要系统调用提供给开发者使用,从而开发应用程序;内核能够控制硬件,比如:让CPU可以运算、让硬盘可以读写数据等;只有内核的话,只能让计算机运行,但是我们不能控制计算机。

而系统调用是操作系统提供给开发者的调用接口。任何硬件都不会默认就 作系统控制,而需要开发商根据操作系统提供的接口开发驱动程序,只有安装了驱动程序才能够控制硬件设备。

篇5:Linux学习笔记之――Linux相关

1、Linux起源

Unix操作系统在20世纪60年代构思完成并实现,并在1970年首次发布。它因容易获取与可移植性高而广泛被学术机构和工商企业采用、复制和修改。它的设计对其他系统的作者影响很大。

在1983年,RichardStallman创建了以创建一个自由软件,类Unix,与POSIX兼容的操作系统为目标的GNU计划。作为这个计划其中的一部分,他又写了GNU通用公共许可证(GPL)。20世纪90年代初,已经有足够的软件去创建一个完整的操作系统。但是,GNU的内核,GNU Hurd没能够充分吸引开发者;这导致了GNU的未能完成。

在20世纪80年代还有另外一个关于自由操作系统的项目,伯克利软件包。这是由UC Berkeley从AT&T的第六版Unix开发而来的。因为它包含了AT&T所拥有的的Unix代码,所以AT&T在20世纪90年代初对加利福尼亚大学提起了法律诉讼。这严重限制了BSD的发展与应用。

1987年安德鲁·斯图尔特·塔能鲍姆发布一个用于教学的类Unix系统。虽然系统的源代码容易得到,但是对源代码的修改与再发布却受到了限制。另外,MINIX的16位的设计与当时日渐便宜及受欢迎的、个人电脑的Intel 80386架构兼容得不好。

这些因素使得Torvalds开始了他的项目。他曾说过,如果那时候有可用的GNU或者386BSD内核的话,他很可能就不会去写他自己的内核了。

2、Linux诞生:

1991年,在赫尔辛基,LinusTorvalds开始那个后面成为了Linux内核的项目。最初它只一个Torvalds用来访问大学里的大型的Unix服务器的虚拟终端。他专门写了一个用于他当时正在用的硬件的,与操作系统无关的程序,因为他要用他那用80386处理器的新PC机的功能。开发是在Minix上,用至今仍为首先的编译器——GCC——来完成的。

Torvalds在他的书只为欢乐 中说过,他最后才意识到自己写了一个操作系统内核。1991年8月25日,他在发布到新闻组“comp.os.minix.”的Usenet上发布了这个系统:

“ 使用minix操作系统的各位,大家好!

我正在为386(486)AT clones写一个(自由的)操作系统(只是爱好而已,不会和GNU一样成为广泛且专业的操作系统)。这个计划从4月份开始酝酿,现在已做好准备。我希望得到人们关于minix优缺点的任何反馈意见,因为我的操作系统和它有类似的方面(因为可行性方面的原因,两者的文件系统物理布局相同)。我刚刚把bash(1.08)和gcc(1.40)移植到了系统上,而且看来运行得很好。这意味着我可以在几个月内我就可以把它变得有实用性了。我想知道大家想要些什么特色。欢迎提任何的建议,但是我不保证我会实现你的建议:-)

Linus (torvalds@kruuna.helsinki.fi)

另:是的,它没有包含任何minix的代码;它的文件系统还是一个多线程的。它没有可移植性(它利用了386的任务调度算法等),而且它很可能永远只会支持AT的硬盘(我只有这种硬盘:-( )

——Linus Torvalds

3、Linux名称的由来

Linus Torvalds本要把他的发时叫做Freax——“fread”,“free”和“x”(暗指Unix)的合成词。在开发系统的前半年里,他把文件以文件名“Freax”存储。Torvalds考虑过Linux这个名字,但是因为觉得它过于自我本位而放弃了使用它。

为便于开发,在1991年9月,他把那些文件上传到了赫尔辛基工业大学(HUT)的FTP服务器(ftp.funet.fi)。Torvalds在HUT负责管理那个服务器的同事Ari Lemmke,觉得“Freax”这个名字不是很好,就在不咨询Torvalds的情况下,把项目的名字改成了“Linux”。但是之后,Torvalds也同意“Linux”这个名字了:“经过多次讨论,他承认Linux这个名字更好。在0.01版本Linux的源代码的makefile里仍然使用‘Freax'这个名字,在之后‘Linux'这个名字才被使用,

所以,Linux这个名字并不是预先想好的,只是它被广泛接受了而已”。

4、Linux吉祥物的由来

Linux的吉祥物是企鹅(英文名:Tux),因为Torvalds在小时候被企鹅咬过,因此印象非常深刻;

5、Linux的优缺点

优点:

a)稳定的系统:Linux 本来就是建立在 Unix 上面发展出来的操作系统,因此,Linux 具有与 Unix 系统相似的的程序接口跟操作方式,当然也继承了 Unix 稳定并且有效率的特点。常听到安装 Linux 的主机连续运做一年以上而不曾当机、不必关机是稀松平常的事;

b) 免费或少许费用:由于 Linux 是基于 GPL 的基础下的产物,因此任何人皆可以自由取得 Linux ,至于一些『安装套件』的发行者,他们发行的安装光盘也仅需要些许费用即可获得!不同于 Unix 需要负担庞大的版权费用,当然也不同于微软需要一而再、再而三的更新你的系统,并且缴纳大量费用!

c) 安全性、漏洞的修补:如果你常玩网络的话,那么你最常听到的应该是『没有绝对安全的主机』!没错!不过 Linux 由于支持者日众,有相当多的热心团体、个人参与其中的开发,因此可以随时获得最新的安全信息,并给予随时的更新,亦即是具有相对的较安全!

d)多任务、多使用者:与Windows 系统不同的, Linux 主机上可以同时允许多人上线来工作,并且资源的分配较为公平,比起 Windows 的单人假多任务系统要稳定的多!这个多人多任务可是 Unix-Like 上面相当好的一个功能,怎么说呢?你可以在一部 Linux 主机上面规划出不同等级的使用者,而且每个使用者登入系统时的工作环境都可以不相同,此外,还可以允许不同的使用者在同一个时间登入主机,以同时使用主机的资源。

e) 使用者与群组的规划:在 Linux 的机器中,档案的属性可以分为『可读、可写、可执行』等参数来定义一个档案的适用性,此外,这些属性还可以分为三个种类,分别是『档案拥有者、档案所属群组、其它非拥有者与群组者』。这对于项目计划或者其它计划开发者具有相当良好的系统保密性。

f)相对比较不耗资源的系统

缺点:

a)有些专业软件没有Linux版本;

b)图形接口作的还不够好

6、Linux的发展史

20世纪60年代,MIT开发分时操作系统(CompatibleTIme-Sharing System),支持30台终端访问主机;

~主机负责运算,而终端负责输入输出;

1965年,Bell实验室、MIT、GE(通用电气公司)准备开发Multics系统,为了同时支持300个终端访问主机,但是1969年失败了;

~刚开始并没有鼠标、键盘,输入设备只有卡片机,因此如果要测试某个程序,则需要将读卡纸插入卡片机,如果有错误,还需要重新来过;

~Multics:MultiplexedInformation and Computing Service

1969年,Ken Thompson(C语言之父)利用汇编语言开发了FIle Server System(Unics,即Unix的原型)

~因为汇编语言对于硬件的依赖性,因此只能针对特定硬件;

~只是为了移植一款“太空旅游”的游戏;

1973年,Dennis Ritchie和Ken Thompson发明了C语言,而后写出了Unix的内核

~将B语言改成C语言,由此产生了C语言之父;

~90%的代码是C语言写的,10%的代码用汇编写的,因此移植时只要修改那10%的代码即可;

1977年,Berkeley大学的Bill Joy针对他的机器修改Unix源码,称为BSD(BerkeleySoftware Distribution)

~ Bill Joy是Sun公司的创始人;

1979年,Unix发布System V,用于个人计算机;

1984年,因为Unix规定:“不能对学生提供源码”,Tanenbaum老师自己编写兼容于Unix的Minix,用于教学;

1984年,Stallman开始GNU(GNU's NotUnix)项目,创办FSF(Free Software Foundation)基金会;

~ 产品:GCC、Emacs、Bash Shell、GLIBC;

~ 倡导“自由软件”;

~ GNU的软件缺乏一个开放的平台运行,只能在Unix上运行;

~ 自由软件指用户可以对软件做任何修改,甚至再发行,但是始终要挂着GPL的版权;

~ 自由软件是可以卖的,但是不能只卖软件,而是卖服务、手册等;

1985年,为了避免GNU开发的自由软件被其他人用作专利软件,因此创建GPL(General Public License)版权声明;

1988年,MIT为了开发GUI,成立了XFree86的组织;

1991年,芬兰赫尔辛基大学的研究生LinusTorvalds基于gcc、bash开发了针对386机器的Lniux内核;

1994年,Torvalds发布Linux-v1.0;

,Torvalds发布Linux-v2.0,确定了Linux的吉祥物:企鹅;

7、Linux内核版本的介绍

Linux的内核版本分为稳定版本和开发版本;

此版本如果是偶数,则为稳定版本,如果是奇数,则为开发版本,内核开发人员使用;

释放版本为对次版本的改动,即加入一些功能;

修改版本为编译的次数,每次加一;

篇6:简化“之”的笔记(网友来稿)

湖北谷城三中 胡文勇

“之”在文言文中用法灵活,出现频率高,特别是做助词时,用法繁多,初学者做起笔记来,如果不运用正确的简化方法,要么空耗时间,要么效果不佳,甚至多走弯路。

笔者认为要简化其笔记,首先要掌握其做助词的基本用法:

①用在定语和中心语之间,相当于“的”。例如:古之学者。②用在主谓语之间,取消句子的独立性。例如:师道之不传也久矣。③定语后置的.标志,用在中心语与定语之间。例如:蚓无爪牙之利,筋骨之强。④宾语前置的标志,用在宾谓之间。例如:句读之不知,惑之不解。⑤补语的标志,用于谓语与补语之间。例如:以其求思之深而无不在也。⑥用在表示时间的副词之后,补足音节,没有实在意义。例如:顷之,久之。

掌握了以上用法,做笔记时先可以简化为:①定中之间。②主谓之间。③中定之间。④宾谓之间。⑤谓补之间。⑥音节助词。熟练了,还可以简化为:定中、主谓、中定、宾谓、谓补、音节。

世上无难事,只怕有心人,只要掌握了规律,方法得当,“之”的用法也容易掌握。

作者邮箱: SANREN123456@TOM.COM

篇7:Python笔记之文件

1,文件打开和创建#file用于文件管理file(name, mode [, buffering]])name为文件名,存在-打开;不存在-创建mode为打开模式,r, r+, w, w+, a, a+, b, U等

2,读取文件

#open()读取文件data=open(‘file_name’) #打开一个文件print( data.redline, end=‘ ‘) #用readline()读取一个数据行data.seek(0) #回到文件起始位置for line in data print(line, end=‘ ‘)data.close() #关闭文件

读取文件的方式#1)按行读取

f = open(“file.txt”)while True: line = f.readline() if line: print line else: break;f.close()

#2)多行读取

f = open(‘file.txt’)lines=f.readlines() #readlines() 存下了f的全部内容for line in lines print line

#3)一次性读取read()

f = open(‘file.txt’)content = f.read()print contentf.close()

3,文件写入

#write(),writelines()写文件f = file(‘file.txt’, ‘w+’) #w+读写方式打开,先删除原来的,再写入新的内容line = [“hello n”, “world n”]f.writelines(li)f.close()#追加新内容f = file(‘hello.txt’, ‘a+’)content = “goodbye”f.write( content )f.close()

4,文件删除#需要使用 os 模块 和 os.path 模块#os模块的 open()和 file()函数和Python内建的用法不同

import osfile(‘hello.txt’, ‘w’)if os.path.exists(‘hello.txt’) os.remove(‘hello.txt’)

5,文件复制

#用read()和write()实现拷贝src = file(“hello.txt”, “r”)dst = file(“hello2.txt”,”w”)dst.write( src.read() )src.close()dst.close()#shutil模块 copyfile()函数#copyfile( src, dst) #文件复制shutil.copyfile(“hello.txt”, “hello2.txt”)#move( src, dst) #文件剪切,移动shutil.move(“hello.txt”, “../“) #移动到父目录下shutil.move(“hello2.txt”, “hello3.txt”) #移动+重命名

6,文件重命名

#修改文件名 os模块的rename()函数import osos.rename(“hello.txt”, “hi.txt”)#修改后缀名import sfiles = os.listdir(“.”)for filename in files: pos = filename.find(“.”) if filename[ pos+1 :] == “html”: newname = filename[ :pos+1] + “jsp” os.rename( filename, newname)

7,文件内容查找

#文件查找import ref1 = file(“hello.txt”, “r”)count = 0for s in f1.readlines() : li = re.findall(“hello”, s) #findall()查询变量s,查找结果存到li中 if len( li) >0 : count = count + li.count(“hello”)print count,”hello”f1.close()#文件替换f1 = file(“hello.txt”, “r”)f2 = file(“hello2.txt”, “w”)for s in f1.readlines(): f2.write( s.replace(“hello”, “hi”) )f1.close()f2.close()

8,文件比较#difflib模块用于序列,文件的比较

9,配置文件的访问#Python标准库的ConfigParser模块用语解析配置文件

10,文件和流

#sys模块中提供了stdin,stdout,stderr三种基本流对象import sys#stdin表示流的标准输入sys.stdin = open(“hello.txt”, “r”) #读取文件for line in sys.stdin.readlines() print line#stdout重定向输出,把输出结果保存到文件中sys.stdout = open(r”./hello.txt”, “a”)print “goodbye”sys.stdout.close()

篇8:cisco笔记之nat

搭建路由器环境时,习惯在路由器之间使用30位掩码,这样没有问题,但是一旦做静态nat只能使用固定已有的地址,因为30位掩码只有两台合法可用地址,今天做实验就出现这个问题,低级失误……

1、 静态NAT:将NAT和ISP路由器的s4/0接口地址改为10.1.1.1/24和10.1.1.2/24,重新在NAT路由器上做静态nat,就ok了。路由器命令如下:

natR1>en

natR1#conf t

natR1(config)#ip nat in source static 192.168.1.2 10.1.1.100

natR1(config)#int e0/0

natR1(config-if)#ip nat in

natR1(config-if)#int s4/0

natR1(config-if)#ip nat out

就这么简单,查看地址转换:

natR1#show ip nat tr

Pro Inside global     Inside local      Outside local     Outside global

--- 10.1.1.100        192.168.1.2       ---               ---

debug查看

natR1#debug ip nat

IP NAT debugging is on

2、动态NAT:删除之前所做的静态NAT,总结一下动态NAT的几个步骤:

(1)、定义NAT地址池

natR1(config)#ip nat pool dengzb 10.1.1.3 10.1.1.10 netmask 255.255.255.0

ip nat pool关键字,dengzb是地址池的名字,10.1.1.3 10.1.1.10起始和终止IP地址,掩码

(2)、定义标准访问控制列表

natR1(config)#access-list 10 permit 192.168.1.2 0.0.0.1

此处,仅允许1.2和1.3两个地址

(3)、在NAT中引用标准访问控制列表

natR1(config)#ip nat inside source list 10 poo dengzb

(4)、定义入接口和出接口

natR1(config)#int e0/0

natR1(config-if)#ip nat in

natR1(config)#int s4/0

natR1(config-if)#ip nat ou

3、PAT端口NAT/复用NAT --!whatever

和动态NAT没有区别,仅在动态NAT后面加上个overload即可,

暂时简单这样理解

如果删除nat的时候提示正在使用,则到特权模式下clear ip nat tr *

阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。