zoukankan      html  css  js  c++  java
  • ACM——【百练习题备忘录】

    1. 在做百练2807题:两倍时,错将判断语句写成 a/b ==2,正确写法是:a == b*2

    因为C/C++int型做除法时自动舍入,如:5/2 == 2,但是 5 =/= 2*2。

    2. 在做百练2715题:谁拿了最多奖学金时,一直Wrong Answer,最后才发现真的是自己算错了,在判断语句中>85写成了>80

    3. 在做百练2713: 肿瘤面积时,一开始提交显示 Runtime Error,一看是数组开小了,可能的数据是n不大于1000,我定义的时候是105;修改数组大小后再次提交显示Wrong Answer。

    4. 百练2798:2进制转化为16进制没做出来。

    5. 百练2818:密码,

      1)Wrong Answer:结果错误

      2)Time Limit Exceeded:暴力求解,超时

      3)Presentation Error:每一个块结束都要输出换行符' '

      4)Runtime Error:数组越界,数组开的太小

    6. 百练2972:确定进制,注意k进制数N的每一位都比k小。

    7. C++调用iostream中的ios::sync_with_stdio(false)以提高I/O效率

    8. 百练2974:487-3279,Runtime Error,数组开小了

    9. 百练2798:2进制转化为16进制:

    int num = len % 4;
    int base=1;
    for(int i=num-1;i>=0;i--){
        ch += (bin[i]-'0')*base;
        base *= 2;
    }
    printf("%X",ch);

    当num=0时,按照逻辑,后面的代码不应该输出,因此出错,解决方法是判断num不为0即可,或num为整数。

    10. 百练题目2705:用算术式子再做一次。

    11. 百练2707:别人的代码:

    #include <cstdio>
    #include <cmath>
    int main()
    {
        int n;
        scanf("%d",&n);
        while(n--){
            double a,b,c;
            double pd;
            double part1,part2;
            scanf("%lf %lf %lf",&a,&b,&c);
            if (a < 0){
                        a = 0 - a;
                        b = 0 - b;
                        c = 0 - c;
                    }
            pd=b*b-4*a*c;
            part1 = (0 - b)/ (2 * a);
            if(pd>0){
                part2 = sqrt(pd)/(2 * a);
                printf("x1=%.5lf;x2=%.5lf
    ",part1+part2,part1-part2);
            }else if(fabs(pd)<1e-8){
                printf("x1=x2=%.5lf
    ",part1);
            }else{
                part2 = sqrt(0 - pd)/ (2 * a);
                printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi
    ",part1,part2,part1,part2);
            }
        }
        return 0;
    } 

    来源:http://www.cnblogs.com/xzt6/p/5730697.html

    对于以下问题:

    实测情况为:

    1. -b/(2*a)即可;
    2. b=0时,若将结果分成real和img,则不存在上述问题;
    3. -0.00000似乎不影响结果正确性。

    总上所述,关键是用double类型取代float类型和对delta判等用一个极小值例如1e-8。

    12. 百练2724:可以用C++<map>实现,代码量更少。

    13.百练2856:输出用

    printf("%g
    ",0.8+0.5*fmax(w-1,0.0)+(exp=='y'?2:0));

    14. 百练2683:该数列一开始看成是Fibonacci数列中的后一项/前一项,所以实现时用fibonacci数列进行模拟,发现对于次数99来说,无论是int型还是long型,都有数据溢出。看两年前的提交记录,才发现,该数列满足:a[n] = 1/a[n-1] + 1,于是用此思路迎刃而解。还是感叹人在不同时候的思路是很不同的。此题给人的警示是:当循环有数据溢出时,可以考虑发现数列的通项公式。

    15. 百练2697:题目出错了,x = (x1+x2)/2,而不是x = (x2-x1)/2;是f(0)>0而不是f(a)>0。真想骂人,出题能不能走点心。

    16. 百练2868:题目出错了,输入不是一个数,而是若干输入,需要用 while(EOF!=scanf("%lf",&num)) ,不然会报 Wrong Answer ,真心觉得出题人谨慎点行不行,POJ本来就不给出错案例,要想Accepted,就必须考虑所有边界条件,就必须严格按照题目要求进行输入输出,这下好了,输入条件都不明确,还怎么做题!

    17. 百练2682:循环移动这道题很经典,可以用三次reverse操作来实现。 

    18. 百练2938:交换两个整数可以用:

    a = a^b;
    b = a^b;
    a = a^b;

    来实现。

    19. switch后面只能跟整型变量和字符型变量,不能接字符串。 

    20. a%b时,b一定非0.

    21. 输出浮点数时,若对精度无要求,建议使用"%g"修饰符。 

    参考资料:

  • 相关阅读:
    简单明了的带你理解springboot原理和三大核心注解
    Spring Boot(一):入门篇
    【Mysql优化】聚簇索引与非聚簇索引概念
    Mysql索引原理与优化
    Mysql全文索引的使用
    索引的优缺点,如何创建索引
    184 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 04 例:字符串与byte(即:字节)数组间的相互转换
    183 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 03 String常用方法(下)
    182 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 02 String常用方法(上)
    181 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 01 String常用方法简介
  • 原文地址:https://www.cnblogs.com/oddcat/p/9704117.html
Copyright © 2011-2022 走看看