非学无以广才,非志无以成学
1-1 整数值用%d输出,实数用%f输出
1-2 scanf中的占位符和变量的数据类型一一对应,且每个变量前需要加&符号
1-3 尽量用const关键字声明常数,const double pi = acos(-1.0);
1-4 C99标准中double的输入采用%lf,输出必须采用%f
1-5 算法竞赛是在比谁能更好地解决问题,而不是在比谁写的程序看上去更高级
1-6 int型整数和double型浮点数的最大最小值
#include <iostream>
#include <limits.h>
#include <float.h>
using namespace std;
int main()
{
cout<<"最大int型整数"<<INT_MAX<<endl;
cout<<"最小int型整数"<<INT_MIN<<endl;
cout<<"最大double型实数"<<DBL_MAX<<endl;
cout<<"最小double型实数"<<DBL_MIN<<endl;
return 0;
}
2-1 建议尽量缩短变量的定义范围。例如在for循环的初始化部分定义循环变量
2-2 在目前流行的竞赛平台上,int都是32位整数,范围为-2^31 ~ 2^31-1
2-3 乘法时整数溢出,则使用long long , 范围为-2^63 ~ 2^63-1
2-4 long long 在Linux下的输入输出格式符为%lld,但在Windows平台中有时为%I64d.为保险起见,可以用C++流,或者编写自定义输入输出函数。
2-5 使用计时函数返回程序目前为止运行的时间。引入<time.h>
头文件,输出为printf("Time used = %.2f\n", (double)clock() / CLOCKS_PER_SEC);
2-6 scanf函数返回的是成功输入的变量个数
2-7 输入输出数据保存在文件中
- 使用重定向方式
#define LOCAL
#include<stdio.h>
int main()
{
#ifdef LOCAL
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif
int x, s = 0, n = 0;
while(scanf("%d", &x) == 1)
{
s+=x;
n++;
}
printf("%.3f\n",(double)s/n);
return 0;
}
如果比赛要求使用标准输入输出,只需在提交之前删除#define LOCAL
即可。
- 如果比赛要求用文件输入输出,但禁止使用重定向方式,应使用fopen和fscanf/fprintf进行输入输出。
#include<stdio.h>
int main()
{
FILE *fin, *fout;
fin = fopen("data.in", "rb");
fout = fopen("data.out", "wb");
int x, s = 0, n = 0;
while(fscanf(fin, "%d", &x) == 1)
{
s+=x;
n++;
}
fprintf(fout, "%.3f\n", (double)s/n);
fclose(fin);
fclose(fout);
return 0;
}
如果想把它改成标准输入输出,只需赋值fin = stdin; fout = stdout;
即可,不用调用fopen和fclose.
2-8 在输入为多组数据的题目中,一个常见的错误就是:在计算完一组数据后某些变量没有重置,影响到下组数据的求解。
2-9 要计算只包含加法,减法和乘法的整数表达式除以正整数n的余数,可以在每步计算之后对n取余,结果不变。
2-10 输出保留到小数点后c位printf("%.*f\n", c, s*1.0/n);