| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1497 人关注过本帖
标题:计算差三角
只看楼主 加入收藏
罗庇鹏ksq
Rank: 5Rank: 5
来 自:太平洋
等 级:职业侠客
帖 子:220
专家分:310
注 册:2012-6-30
收藏
得分:0 
杨大哥的程序看得很吃力,能不能不要这么萌?

从来都是无所谓,现在也该学着有所谓。✿咱们一个人,别坐井观天❀
2013-05-03 23:01
micky1989
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2013-5-3
收藏
得分:0 
两个代码都是全篇无一个注释,看得人真心费劲。。。
2013-05-03 23:52
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,只能说声抱歉了。算法类的代码本就很难看懂,这和看数学定理推导一样,没有一定的基础很难理解为什么要这样做。

关于注释,少了说明不了问题,多了满篇的解释性文字会让你连代码都看不清。有兴趣的话我可以单独开一贴详细阐述这题的算法思想。

补充说明,学编程,看别人的代码增进的是一种代码构建技巧,知道——哦,原来这个算法可以如此来构建。但前提是你得先明白算法的原理。

在自己还不理解问题之前,从别人的代码中其实学不到多少东西。Linux操作系统是开源的,你随时都可以下载到它的源代码,但有几个人看懂了并觉得已经有能力写自己的操作系统了?

问一句,楼上两位兄弟关于这题有没有自己的解题思路?

看懂的朋友们有谁能说说我与小黑(呵呵,习惯这么叫azzbcc了)的算法异同之处?解释有奖

重剑无锋,大巧不工
2013-05-04 13:16
i_code
Rank: 2
等 级:论坛游民
帖 子:19
专家分:15
注 册:2013-5-2
收藏
得分:0 
回复 6楼 beyondyf
感谢!
2013-05-04 15:41
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
题目中有两个条件:

1. 15个数各不相同
2. 对于每个小三角形,顶数等于两底数之差

通过全排列即可实现条件 1
再检测条件 2,符合就输出

直接做肯定很慢,因为15的全排列将近20亿
所以同时检测(剪枝)

以 3L 代码为例,fun函数中利用递归实现全排列(这里就不细说了),ip为当前将要确定的位置

即 ip位置前面的位置已经确定了,所以把小于ip位置的数检测下是否符合条件 2,不符合直接return,不必再递归全排列ip后面的数

例如 ip = 5时,当前已经确定的位置有 0 1 2 3 4,分别对应 第一层1个,第二、三层各两个(简记为00 10 11 20 21)

需要判断 (00 10 11)(10 20 21)是否满足条件 2,又(00 10 11)如果不满足,ip不会等于 5(会被剪枝),所以直接判断 (10 20 21),也就是代码中的sub(1, 3, 4)


8L的代码与 3L唯一的区别是 利用二维数组,更容易实现一般性,不过 ip+1 就需要判断一下了


[fly]存在即是合理[/fly]
2013-05-04 21:33
i_code
Rank: 2
等 级:论坛游民
帖 子:19
专家分:15
注 册:2013-5-2
收藏
得分:0 
回复 13楼 beyondyf
#include<stdio.h>
#include<math.h>
int main()
{
 int a1;
 int b1,b2;
 int c1,c2,c3;
 int d1,d2,d3,d4;
 int e1,e2,e3,e4,e5;
 for(e1=1;e1<=15;e1++)
    for(e2=1;e2<=15;e2++)
    {
     if(e2==e1)
        continue;
     for(e3=1;e3<=15;e3++)
     {
      if(e3==e2||e3==e1)
         continue;
      for(e4=1;e4<=15;e4++)
      {
       if(e4==e3||e4==e2||e4==e1)
          continue;
       for(e5=1;e5<=15;e5++)
       {
        if(e5==e4||e5==e3||e5==e2||e5==e1)
            continue;
        d1=abs(e1-e2);
        if(d1!=e1&&d1!=e2&&d1!=e3&&d1!=e4&&d1!=e5)
        {
         d2=abs(e2-e3);
         if(d2!=d1&&d2!=e1&&d2!=e2&&d2!=e3&&d2!=e4&&d2!=e5)
         {
          d3=abs(e3-e4);
          if(d3!=d2&&d3!=d1&&d3!=e1&&d3!=e2&&d3!=e3&&d3!=e4&&d3!=e5)
          {
           d4=abs(e4-e5);
           if(d4!=d3&&d4!=d2&&d4!=d1&&d4!=e1&&d4!=e2&&d4!=e3&&d4!=e4&&d4!=e5)
           {
            c1=abs(d1-d2);
            if(c1!=d1&&c1!=d2&&c1!=d3&&c1!=d4&&c1!=e1&&c1!=e2&&c1!=e3&&c1!=e4&&c1!=e5)
            {
             c2=abs(d2-d3);
             if(c2!=c1&&c2!=d1&&c2!=d2&&c2!=d3&&c2!=d4&&c2!=e1&&c2!=e2&&c2!=e3&&c2!=e4&&c2!=e5)
             {
              c3=abs(d3-d4);
              if(c3!=c2&&c3!=c1&&c3!=d1&&c3!=d2&&c3!=d3&&c3!=d4&&c3!=e1&&c3!=e2&&c3!=e3&&c3!=e4&&c3!=e5)
              {
               b1=abs(c1-c2);
               if(b1!=c1&&b1!=c2&&b1!=c3&&b1!=d1&&b1!=d2&&b1!=d3&&b1!=d4&&b1!=e1&&b1!=e2&&b1!=e3&&b1!=e4&&b1!=e5)
               {
                b2=abs(c2-c3);
                if(b2!=b1&&b2!=c1&&b2!=c2&&b2!=c3&&b2!=d1&&b2!=d2&&b2!=d3&&b2!=d4&&b2!=e1&&b2!=e2&&b2!=e3&&b2!=e4&&b2!=e5)
                {
                 a1=abs(b1-b2);
                 if(a1!=b1&&a1!=b2&&a1!=c1&&a1!=c2&&a1!=c3&&a1!=d1&&a1!=d2&&a1!=d3&&a1!=d4&&a1!=e1&&a1!=e2&&a1!=e3&&a1!=e4&&a1!=e5)
                 {
                  if(b1==4)
                  {
                   printf("    %d\n",a1);
                   printf("   %d %d\n",b1,b2);
                   printf("  %d %d %d\n",c1,c2,c3);
                   printf(" %d %d %d %d\n",d1,d2,d3,d4);
                   printf("%d %d %d %d %d\n",e1,e2,e3,e4,e5);
                  }
                  
                  

               
               
               
                 }
               
                }



               }


             }
            }
           }

          }

         }

        }

       }
       }

      }


     }


    }


return 0;

}

   这是我的代码,用的是穷举,当然代码比较丑陋。虽然我现在还没看懂你的代码,但感觉写得很有水平,就像你所说的那样构建得比较清楚,还有azzbcc的也是的,也很有水平。我现在大二,个人很喜欢编程,也很想提高自己的能力,能分享一下编程的心得吗?或者谈一下你是怎样学习编程的,还望赐教,谢谢!
2013-05-05 13:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,类似这种代码我也不是没有写过,印象最深的是初中时第一次写的猜数字游戏比你这冗繁多了。

丑点没关系,刚开始学编程要以功能为主,先保证你的程序能执行出正确的结果。之后再考虑效率的问题。

关于编程我还真没什么特别的心得,多动手。程序是编出来的,不是说出来的。所以踏踏实实地勤加练习,功到自然成。

重剑无锋,大巧不工
2013-05-05 21:39
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
哈,我印象比较深刻的是那次写 四阶幻方,16层循环,啧啧!


[fly]存在即是合理[/fly]
2013-05-06 08:00
i_code
Rank: 2
等 级:论坛游民
帖 子:19
专家分:15
注 册:2013-5-2
收藏
得分:0 
回复 17楼 beyondyf
真是大神le! 初中就开始编程,佩服! 以后还望多多指教!
2013-05-06 11:48
zhu_zhi
Rank: 2
来 自:广西百色
等 级:论坛游民
帖 子:129
专家分:92
注 册:2013-4-25
收藏
得分:0 
回复 9楼 azzbcc
服了!
我等廉颇老矣!
2013-05-07 19:42
快速回复:计算差三角
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017498 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved