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

[hdoj1096]通过比对代码总结的小技巧

2013年02月18日 ⁄ 综合 ⁄ 共 1075字 ⁄ 字号 评论关闭

 

 

A+B for Input-Output Practice (VIII)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 39726    Accepted Submission(s): 11871

Problem Description
Your task is to calculate the sum of some integers.
 
Sample Input
3 4 1 2 3 4 5 1 2 3 4 5 3 1 2 3
 

Sample Output
10 15 6
 
题目很简单,相信只要接触过计算机语言的人都能做,在这里就不讲这个题的解法了。
通过与他人代码进行对比的发现了若干个小技巧,让代码上升一个档次。
起始自己的代码如下:
Time:0MS Memory:244K Code Length:285 B 
#include <stdio.h>
int main(){
    int n,m,i,a[10000];//a[ ]数组用来存要相加的若干个数
	int sum;
    scanf("%d",&n);
	while(n--){
       scanf("%d",&m);
	   sum=0;
	   for(i=0;i<m;i++){
		scanf("%d",a+i);
		sum+=a[i];}//每到此处要多一次运算,a[i]在计算内是指针形式,a[i]需要进行一次转化,增加了开销。
	   if(n!=0)//最后一行只有一个空行
	   printf("%d\n\n",sum);
	   else
       printf("%d\n",sum);
	   }
}
 对比他人代码后自己改进的代码如下:

Time:0MS Memory:208K Code Length:279B
#include <stdio.h>
int main(){
    int n,m,i,j,k;//原来的数组a[]用k代替,因为k的值只是一个临时的,它用于计算后就无效了,题目最终需要的值是sum;
	int sum;
        scanf("%d",&n);
        while(n--){
        scanf("%d",&m);
         sum=0;
        for(j=0;j<m;j++){
          scanf("%d",&k);//改进点
         sum+=k;}
    if(n!=0)
    printf("%d\n\n",sum);
    else
       printf("%d\n",sum);
     }


} 
总结:能不用数组就尽量不用,花时间在优化代码上会让你的代码更加有技巧性,即使优化后节约的时间或空间只是一丁点,也会让你取得不小的进步。长此积累,离大牛就不远了。

抱歉!评论已关闭.