1. 判断边界一定要注意,是 i>=0&&i<m j>=0&&j<n 或者 i>=1&&i<=m j>=1&&j<=n .这一小问题要特别注意。
2. ++i 不能随便用 要和 i+1 区别开 前者i的值发生变化而后者i的值保持不变,不能用混
3. 递归求两个数的最大公约数
int gcd(int m,int n)
{
return n==0?m:gcd(n,m%n);
}
4. 一个递归函数往往首先要考虑是否越界,然后再进行其它操作
5.
#include <iostream>
//#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
char c;
c=getchar();
string s;
getline(cin,s);
int t;
t=s.length();
cout<<c<<endl;
}
getchar() 和getline(cin,s)的头文件都是#include <stdio.h> codeblocks里面
6.
#include <iostream>
using namespace std;
int main()
{
int *a=new int[4](); //该语句的作用是把a数组里面的四个元素赋值为0 ps:该语句在VC 6.0里面不起作用,不能赋值为0 , 在codeblocks里面可以执行
for(int i=0;i<=3;i++)
cout<<*(a+i)<<endl; //输出四个0
delete []a;
return 0;
}
7. char a[100] ; 使用cin>>a可以 ,但不能存空格 , int a[100], 不能用cin>>a
8. string a; getline(cin,a) 头文件<string.h> char a[100]; gets(a)头文件 <stdio.h> 二者都可以存空格 string a; cin>>a 不可以存空格
9. int a[100][100]= { {0} }; 初始化二维数组
10.
while(scanf("%d",&n)==1) 注意==1有时候加上这个就由超时变成不超时
11. 奇数与1 得1 (3&1) (5&1) 都是1 注意加括号
偶数与1 得0 (2&1) (6&1) 都是0 注意加括号
12. 编程中0这个数字需要特别特别注意,考虑下要不要单独处理,而且绝不能出现在除数的位置,切记!
13. cout<<'A'+1; 和char s='A'+1; cout<<s; 不一样 ,前者输出的是数字65,后者输出的是B。
14. 字母O和数字0千万别搞混了,有时候因为这一个小错误,而导致全盘皆输。
15. 写组合函数公式时:
for(int i=0;i<n;i++)
{
cmn=cmn*(m-i)/(i+1);
}
不能写成cmn/(i+1)*(m-i), 因为cmn初值为1,一相除会有误差。
采用递归的形式:
int c(int m,int n)
{
if(n==0)
return 1;
if(n>m)
return 0;
return c(m-1,n)+c(m-1,n-1);
}
16. 用一个vis数组来记录是否访问过,用bool类型,别用int类型,二者是不超时与超时的区别。
17. const int N= 100; int a[N], 对a初始化时,最大界限是N-1, 不是N
18. 对于无穷大 const int inf=0x7fffffff ,对数组赋值时用 fill(dp,dp+n,inf) ,不能用memset
19.π因为精度问题 ,代码中最好用 acos(-1)。有时候会因为精度不够通不过。
20.文件输入代码 freopen("input.txt", "r", stdin);
21.
cout<<0x7fffffff<<endl; 2147483647//不能用memset赋值
cout<<0x3f3f3f3f<<endl; 1061109567 //可用memset给数组赋值,值为原数
22. 随机数
srand(time(0)); //根据系统时间设置随机数种子
int i = rand() % N; //取得区间[0,N)的整数
23.从文件中读入
freopen("a.txt","r",stdin);
k=0;
while(1)
{
cin>>data[k];//从文件中读入数到data[]中,k为数据的个数,一开始初始化data[]=-1,退出条件
if(data[k]==-1)
break;
k++;
}
freopen(" con: ", " r ",stdin);//转到控制台
cin.clear();
24. const int inf=0x3f3f3f3f;
int a[5]; 可以用 memset(a,inf,sizeof(a));
double b[5]; 不可以用 memset(b,inf,sizeof(a));
25. bool 数组里面只能用0 或1 不能存其它值,切记啊!
26. sort这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。
27. for( i =a ;i <= b;i++) 注意for循环里面i 和a ,b 的类型要一致 ,不能一个 int 一个long long
28. 输入如下的01矩阵
011
101
110 每一行的三个数是连续的,要想分开存入矩阵中,读入的时候用 scanf("%1d",&num);就可以了。
28. bool b[] ;数组是可以用memset(b,true,sizeof(b)); 或 memset(b,false,sizeof(b));
因为bool占一个字节,每个字节都初始化为00000001