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

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;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值