• hdu 1215 七夕节


    作为一个新手,最大的优势就是每道题都能学到很多经验,这道题真是让我受益匪浅。

    首先给数组初始化时想到用memset,头文件 <memory.h> or <string.h>,可我想都赋值为1,用memset(a,1,sizeof(a))是不行的,memset不能给非字符型数组赋值,不过可以都初始化为0,给字符型数组赋值很方便。详细参考http://baike.baidu.com/view/982208.htm

    求全部的约数之和也可用筛法(一般用来求素数)+打表(就是把一定范围里的全部素数都求出来,需要那个就返回哪个)。

    大数组要开在主函数外面,否则会超时,而且要比要求的数值再大1、2个。

    循环赋值时那个等号不能少,少了就WA,测试数据会取边界值检测,一定注意边界的处理,ACM对细节的处理非常在意。

     1 #include<stdio.h>
     2 #define MAX 500000
     3 int a[MAX+1];      //大数组要开在外面,否则超时,而且要比要求的数值再大1、2个 
     4 int main()
     5 {
     6     int n;
     7     int i,j;
     8     scanf("%d",&n);
     9     a[0]=0;
    10     for(i=1;i<=MAX;i++)      //这个等号不能少,少了就WA了... 
    11       a[i]=1;           //至少都有1 
    12         for(i=2;i<=MAX/2+1;i++)   
    13           for(j=i+i;j<=MAX;j+=i)    //只要是i的倍数的数肯定含有i这个因子,i自身就不加了,从i的下个开始
    14             a[j]+=i;
    15     while(n--)
    16     {
    17         int t;
    18         scanf("%d",&t);
    19         printf("%d
    ",a[t]);    
    20     }
    21 }
  • 相关阅读:
    Parcel与Parcelable剖析
    Binder文集
    Charles 使用教程
    AsyncTask
    Android 编译时注解
    scanf(),gets(),getchar()
    银行家算法
    最长公共子序列(LCS)问题
    动态规划 求解数字三角形最大值
    参数 存在二维数组
  • 原文地址:https://www.cnblogs.com/xurenwen/p/3868704.html
Copyright © 2020-2023  润新知