现在的位置: 首页 > 综合 > 正文

一些开始在OJ上做ACM的入门知识

2018年05月02日 ⁄ 综合 ⁄ 共 1143字 ⁄ 字号 评论关闭

1.     循环读取数据

while(cin>>a>>b){

    cout<<a+b<<endl;

}

while(cin>>n&& n!=0){

    cout<<n<<endl;

}

While(scanf(“%d”,n)==1&& n!=0){

}

注意 如果需要输入数据过多,使用scanf速度比cin快很多

2.     动态分配数组

一维数组:
定义:
int *p =new int [10];
int *p;
p=new int[10];
 

使用c的话,方法相同,使用malloc, int *p=(int *)malloc(sizeof(10*int))

收回空间:
delete []p;  //不论数组有多少纬,只用一个[]
c: free(p)
二维数组动态分配:
定义一个m行n列的二维数组:
int m,n;
int **pm;
p=new int *[m+1]; //m+1行,每行开辟一个头指针,指向一维数组,第一个不用
for(int i=1;i<=m;i++){
pm[i]=new int[n+1]; // 每行n+1个空间,pm[i]为该一维数组首地址
for(int j=1;j<=n;j++){
    cin>>pm[i][j];
}
}
收回空间:
for(i=0;i<=m;i++)
        delete [] pm[i];
delete [] pm;

3.     数据取值范围:

注意题目给定的数据取值范围,尽量取占用空间小的数据类型。

v short:16位整数,占2字节,-2^15~2^15-1

v unsigned short:占2字节,0~2^16-1

v int:32位整数,占4字节,-2^31~2^31-1

v unsigned int:占4字节,0~2^32-1

v long==int(由于现在使用的都是32位系统)

v float:占4字节,7位有效数字

v double:占8字节,15位有效数字

一般来说用到浮点型的问题都是追求精度的,而不是卡内存,所以在一般情况下我们应当选择使用double,而很少用float。

在VC++编译器中,可以定义__int64(注意前面是两个短下划线)

__int64:占8字节,-2^63~2^63-1, printf(" %I64d \n",int64 );(是大写字母i)

unsigned__int64:占8字节,0~2^64-1, printf(" %I64u \n",int64 );

在其他编译器中,如DEV C++,可能使用方法有所不同
long long==__int64,printf("%lld\n",a);
unsigned long long==unsigned __int64, printf("%llu\n",a);

 

4.     其他一些注意事项

1)  宏定义#define N 100
不如写成const int N=100;

 

抱歉!评论已关闭.