平时问题汇总(持续更新)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sr19930829/article/details/18449535

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

猜你喜欢

转载自blog.csdn.net/sr19930829/article/details/18449535