1. 动态规划自顶向下的话不需要返回值, 递归实现。
自底向上可用for循环实现
2. max, min函数定义在algorithm头文件中,但是Win32头文件windef.h中叶定义了这个, 所以在VC++中用max函数引入algorithm头文件,还是会说没有定义。可以换成
_MAX和_MIN。但是注意提交的时候记得改回max和min, 不然又会说没有定义,zoj中会编译错误.
3. abs用于对整数取绝对值 int abs(int a), fabs用于对浮点数取绝对值 float abs(float a);
4. 细细品味两句话,1. Output one blank line after each symbol.每个测试例后面输出一个空行
2 Between two cases, output a blank line.这个是两个测试例之间一个空行,所以最后一个就不用
int font, flage = 0;
while(cin>>font && font){
if(flage)
cout<<endl;
flage = 1;
}
5. 注意positive integers正数的意思而已,如果只是说The input consists of several lines, each of which contains three integers a, b and c., 那我们就要当大数处理, 加入没有给出Given three integers a, b and c(|a|, |b|, |c|<10000), 没有说positive, 那么负数的情况你也得想到
6. memset函数 void *memset(void *s,int c,size_tn)
含义:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值。
问题:int a[20], 如果用memset(a,1,20);(实际上与memset(a,1,5*sizeof(int))结果是一样的)
就是对a指向的内存的20个字节进行赋值,每个都用ASCⅡ为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了
因为字符型数组,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以输出没有问题。
总结:int,float型数组memset 0或-1可以,其它的不行。char 型可选择各种字符可任意,但是'-9'跟‘9’,memset都是9..所以char数组不要memset为
负数
memset(a, '-1', sizeof(a));
for(j = 0; j < 10; j++){
for(k = 0; k < 10; k++){
if(a[j][k] == '-1')
cout<<"R";
else
cout<<a[j][k];
}
cout<<endl;
}
这样输出的全部是1,所以不可取。
例如有一个结构体Some x,可以这样清零:memset(&x,0,sizeof(Some));
如果是一个结构体的数组Some x[10],可以这样:memset(x,0,sizeof(Some)*10);
7.题目中容易看错的divide和divide by。divide是除, divide by除以。Eight divided by two is equal to four八除以二等四。.|| Divide eight by two equals four. || Divide two into eight and you get four. ||Two into eight goes four times.
http://www.hujiang.com/ciku/divide_by/
8. 为了达到先找到头结点在向后输出可能会想到stack,但是递归输出的确更加的高明。