const int maxN = 105;
const int maxV = 100005;
int f[maxV];
fill(f,f+maxN,0);
当计算 f 的值的时候,就很容易出现问题。这是一个很隐蔽的错误,而且不易察觉,大多数时候,我们都以为是自己写的代码或者是思想错了,哪知道问题在于这个细节问题!因为我们申请的是 maxV大小的 int 型数组,结果只初始化了一部分(maxN大小),导致WA!我就曾因为这个问题浪费了30min 来找bug!【蒟蒻实证!】
#include<iostream>
using namespace std;
const int maxN = 10;
int arr[maxN][maxN]; //
int tot = 0; //记住tot不要超过100就行
int main(){
for(int i = 0;i<10;i++)
for(int j = 0;j< 10;j++)
arr[i][j] = 1;//全部赋值为1
//下面见证一下“奇迹”
int cnt = 1;
for(int i = 0;i<5;i++){
/*主要j的取值 =>
01.因为这里j的取值越界了,但是整个二维数组的值
却没有越界,所以你会得到Wrong Answer的界面,但是得不到Runtime Error
的提醒。
02.同时,可以看到这里的赋值手法有点儿“一维”状态空间的意思。
03.在起初的位置上,往后推20个。比如arr[4][20]就是在arr[4][0]后推20个,
这样得到的结果就是arr[4][0] = 81,…… arr[4][20] = arr[5][10] = 100;
*/
for(int j = 0;j<20;j++){
arr[i][j] = cnt ;
cnt ++;
}
}
for(int i = 0;i< 10;i++){
for(int j = 0;j< 10;j++){
printf("%4d",arr[i][j]);
}printf("\n");
}
}
执行结果如下: ---------------------------------智慧分割线------------------------------- 2.define 使用不当
#define N 100000000001
define 定义的值不能过大,否则会到值编译错误,停止工作。
#define的用法不仅仅局限于对数据,同样对于字符串,以及其他的都是适用的,比如以下的程序。
#include <stdio.h>
#define P printf("I Love programming\n");
int main()
{
P;
return 0;
}
如果觉得define不好使,也可以使用const来定义静态变量。 3. 未引用正确的方法库
报错:[Error] 'strcmp' was not declared in this scope
需要针对具体的报错信息添加头文件。比如在上面的这个报错信息中,就需要添加#include<cstring>【c++】或者是#include<string.h>【c】。 4.整型的范围【非常重要!】
算法题中经常会出现整数范围的考察,这是一个非常基础但重要的知识点,务必掌握。这里我讲解一些最常用的整型。 4.1 int范围大小
int声明的数据是带正负号的整数,一般情况其占内存大小是4B,即32位,有一位是符号位,故最大正整数是2^31-1,最大负数是2^31【这与计算机的存储方式有关,因为是二进制补码存储】。在 #include<climits> 头文件中可以看到int的最大值和最小值。代码如下所示:
#include<iostream>
#include<climits>
using namespace std;
int main(){
cout << "INT_MAX="<< INT_MAX<<"\n";
cout << "INT_MIN="<< INT_MIN<<"\n";
}
4.2 long long 的范围大小
同样的道理,我们可以获取到long long类型的最大、小值。 4.3 其它
这个库里 (应该) 还有很多其它好东西,值得研究。 4.4 关于cpp中的一个整数是什么类型的讨论
使用如下代码测试:
int main(){
cout << sizeof(1)<<"\n";
cout << sizeof(1ll)<<"\n";
}