`
qingdaoguy
  • 浏览: 24320 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

一道简单的编程题启示

阅读更多
自认为作为程序员来说,对语言的掌握是必须的,然而更重要的是算法。
以下两个程序都是实现一个问题,思路大致相似,然结果却天差地别。这也许给我们编程以启示。
题目:
我们称由自1到n的连续自然数之和为三角数。如第七个三角数为:1+2+3+4+5+6+7=28;
现在我们要求第一个因数个数大于500的三角数(即该三角数最小)。
程序一:
public class P12 {
 
 
 public static void main(String args[]){
  int start = 250,count = 0;
  long result;
  long beg = System.currentTimeMillis();
  while(true){
  
   result = start * (start + 1)/2;
   for(int i =1;i <Math.sqrt(result)+1 + 1;i++ ){
    if(result % i == 0)
     count ++;
   }
   if(count>=250)
    break;
   else{
    start ++;
    count = 0;
   }
  }
  System.out.println(result);
  long end = System.currentTimeMillis();
  System.out.println((end - beg)+"ms");
 }
 
}
 
程序一结果:
76576500
3605ms
程序二:
public class P12 {
 
    /** Creates a new instance of FactorCount */
    public P12(int limit) {
        int cnt = 0;
        for (int i = 1; cnt <= limit; i++){
            if (i % 2 == 0) cnt = count(i / 2) * count (i+1);
            else cnt = count(i) * count((i+1)/2);
//            System.out.println("" + i + "\t" + cnt);
            if (cnt > 500)
                answer = i;
        }
    }
 
    int answer = 0;
 
    int count(int n) {
        int result = 0;
        for (int i = 1; i*i <= n; i++){
            if (n % i == 0) {
                result+=2;
                if (n / i == i)
                    result--;
            }
        }
        return result;
    }
 
    int getAnswer(){return answer;}
 
    public static void main(String[] args){
        long start = System.currentTimeMillis();
        int n = new P12(500).getAnswer();
        long stop = System.currentTimeMillis();
        System.out.println("" + n + "\t"+ n*(n+1)/2 + "\tTime: " + (stop-start) + "ms");
    }
 
}
程序二结果:
12375 76576500 Time: 25ms
分享到:
评论

相关推荐

    全国大学生电子设计竞赛赛题分析和启示

    1. **综合题**:覆盖模-数混合电路设计,涉及到单片机和可编程逻辑器件的应用; 2. **专业方向题**:侧重某一特定领域,如电子信息、计算机、通信、自控、电子技术应用等; 3. **基础电路题**:侧重于模拟电路、数字...

    ACM/ICPC全球总决赛试题集锦

    每一道题目的设计都经过精心策划,旨在测试选手们的逻辑思维、创新能力和快速解决问题的能力。解题过程不仅仅是编写代码,更是对问题本质的理解和复杂问题简化的过程。 从1992年至2008年,这十几年间,ACM/ICPC的...

    2012蓝桥杯C本科初赛试题

    此题考察的是编程能力和数学逻辑能力。题目描述了两种微生物X和Y,在特定条件下的数量变化规律,要求计算60分钟后Y的数量。 **背景介绍:** - X微生物出生后每隔3分钟分裂一次,数量翻倍。 - Y微生物出生后每隔2...

    ACM 国际大学生程序设计竞赛试题与解析

    每一道题目的解析都详尽地阐述了解题思路、关键算法以及代码实现,这对于初学者理解并掌握高级编程技巧极具价值。 通过研究这些题目和解析,你可以: 1. **深化算法理解**:ACM竞赛中的问题往往需要运用巧妙的算法...

    poj解题报告(一百多道题)

    在编程竞赛的世界里,POJ(Problem Set of Peking University)是一个广受欢迎的在线判题系统,它为程序员提供了丰富的算法挑战。这份“POJ解题报告”包含了超过一百道题目的详细解答,涵盖了从基础到高级的各种算法...

    百度校园招聘笔试试题-未知年份岗位.doc

    1. **逻辑推理**:试题中提到的字母序列O,T,T,F的问题,这是一道逻辑推理题,考察的是对模式识别和规律分析的能力,通常在软件开发面试中会出现类似的逻辑思维测试。 2. **数学问题**:16个数字填入16格方框的问题...

    中科杯软件设计大赛作品

    此外,作品还引入了一些有趣的例子来解释抽象概念,如通过一道著名的Google面试题——如何向一位不懂数据库的老太太讲解什么是数据库——来说明深入浅出的重要性。 #### 三、技术亮点 - **C#与Flash的交互**:虽然...

    TwentyFour:根据给定的四个整数,逆向计算这四个整数通过什么运算可以计算出24

    总的来说,“TwentyFour”游戏不仅是一道有趣的编程题,也是提升我们算法设计能力的良好实践。它让我们在编码的过程中思考数学的逻辑性和计算机的效率,同时激发我们去探索更复杂问题的解决方案。通过解决这样的问题...

    ACM.rar_HDU Cable master_Spell checker A_Spell checker acm_acm经_

    "Cable master"可能是指其中的一道具体题目,通常这类题目会涉及数据结构和算法的应用,例如图论中的最短路径问题或网络流等。通过解决这样的问题,学习者可以提升对这些复杂算法的理解和应用能力。 接下来是"Spell...

    计算机学习经验谈

    - 每天坚持解决一道非水题,长期积累将有助于提升技能。 - 对于错过本科时期的同学,研究生阶段依然有机会。 2. **研究生阶段**: - 如果导师给予学生足够的自主权,利用好这段时间进行自我提升非常重要。 - ...

    备战数学建模竞赛与论文剖析

    - **编程专家**:负责解决建模过程中所需的编程问题,能够熟练使用MATLAB、Lindo、Lingo或C/C++等工具。 - **资料搜集与模型构建者**:主要负责搜集相关信息,探索可能的建模方法,并参与模型构建。 #### 二、竞赛...

    河南省武陟一中西区高三语文学生优秀作文细节决定成败素材

    在备考阶段,高三学生需要关注每一个知识点,每一道习题的解题步骤,每一次模拟考试的总结反馈。只有对每一个细节都有深入的理解和掌握,才能在高考中取得理想的成绩。同样的道理,对于教师而言,设计教学方案时,...

    2020_MCM_Problem_A.docx

    【2020美赛A题】:美国...总的来说,2020年美赛A题"Hook Line and Sinker"是一道挑战性的综合问题,它将数学与实际应用紧密结合,旨在培养学生的创新思维和问题解决能力,同时也体现了数学在解决实际问题中的巨大潜力。

    sicp-exercies

    10. **并发与同步**:虽然SICP主要关注理论,但它也为并发编程提供了一些启示。通过理解过程的独立性和交互,读者可以为未来处理多线程和分布式系统打下基础。 通过解决" sicp-exercies "中的习题,不仅可以深化对...

    IOI国家集训队论文集1999-2019

    侯启明 -《信息论在信息学竞赛中的简单应用》 姜尚仆 -《模线性方程的应用——用数论方法解决整数问题》 金 恺 -《探寻深度优先搜索中的优化技巧——从正方形剖分问题谈起》 雷环中 -《结果提交类问题》 林希德 ...

    leetcode卡-algorithmAssignment:算法赋值

    3. 题目分析:每做完一道题,都要对解题思路进行总结,理解其背后的算法原理,这样可以加深记忆,提高解题速度。 4. 查阅资料:遇到难题时,可以参考其他人的解决方案,但要避免直接抄袭,要学会从中学习并转化为...

Global site tag (gtag.js) - Google Analytics