2018.2.16总结
关于算法笔记
- 今天通过算法笔记,复习了C(C++)的基本使用方法。
- 对于基本的变量的定义,使用
scanf()、printf()
以及getchar()、putchar()
还有get()、puts()
进行数据的输入、输出。 - 对于数组的使用,还有
memset()
的统一赋值的使用。
memset(数组名,值,sizeof(数组名))
,建议只赋值0和-1,其他值使用fill()
进行赋值
- 对于基本的变量的定义,使用
- 对于OJ的黑盒测试也有了更深的了解
- 分为单点测试、多点测试(对应不同的输入控制)
- 对于日期类的题目,使用预处理方法,用空间换空间,以及使用数组进行日期的计算有了一定的了解,一下是常用的
int dayOfMonth[13][2] =
{
{0,0},
{31,31},
{28,29},
{31,31},
{30,30},
{31,31},
{30,30},
{31,31},
{31,31},
{30,30},
{31,31},
{30,30},
{31,31}
};
int helper(int year)
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
return 0;
}
struct Date
{
int day;
int month;
int year;
void nextDay()
{
day++;
if(day>dayOfMonth[month][helper(year)])
{
day =1;
month++;
if(month>12)
{
month=1;
year++;
}
}
}
};
- 还有进制转换类题目的大致流程,其中一个比较大的坑是要使用do-while而不是while,避免需要转换的数字为零时的bug
int ans[32] = {0},num = 0;
do
{
ans[num++] = c%d;
c/=d;
}while(c!=0);
for(int i = num -1; i>=0; i--)
{
printf("%d",ans[i]);
}
还有一个比较重要的收获是,关于使用C++中的排序函数sort()的使用
使用
sort()
必须先引入头文件和命名空间#include <algorithm>、using namespace std
使用格式如下
sort(元素首地址,尾元素的最后一个地址,比较函数)
, 对于我们定义的结构体,或者说STL容器时,这时候我们就需要cmp()
比较函数登场了对于下面的代码
bool cmp(student t1,student t2){ return t1.score > t2.score //降序排序 }
对于
>
还是<
的问题,有一个简答的记法>
是从大往小排,所以是降序<
是从小往大排,所以是升序
对于STL容器的使用,等我们接触到再详细描述。