算法竞赛入门1-2章

非学无以广才,非志无以成学

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 
#include 
#include 
using namespace std;

int main()
{
    cout<<"最大int型整数"<
算法竞赛入门1-2章_第1张图片
image.png

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 使用计时函数返回程序目前为止运行的时间。引入头文件,输出为printf("Time used = %.2f\n", (double)clock() / CLOCKS_PER_SEC);
2-6 scanf函数返回的是成功输入的变量个数
2-7 输入输出数据保存在文件中

  • 使用重定向方式
#define LOCAL
#include
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
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);

你可能感兴趣的:(算法竞赛入门1-2章)