| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2163 人关注过本帖
标题:请教一个简单的求和数列
只看楼主 加入收藏
peng_piao
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-11-5
收藏
得分:0 
还是直接在循环条件里加就j!=k;
k!=nNum就可以了啊,不要使用那么复杂的if语句,不好懂
2008-11-22 23:12
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
这个题变相的求一个奇数幻方,算法的复杂度顶多O(n),至于输出,通过行列主次对角线即可。
程序代码:
#include <stdio.h>
#define  MAXSIZE   3
#define  TOP       0
#define  BOTTOM    2
#define  LEFT      0
#define  RIGHT     2

void MagicBox(int (*Matrix)[3]) {

     int   row  ,  col  ;
     int   i = 0 ,  j = 1 , cnt ;
     Matrix[i][j] = 1 ;
     for (cnt = 2 ; cnt <= MAXSIZE * MAXSIZE ; cnt++) {
          col =  j - 1 < LEFT ? RIGHT  :  j - 1 ;
          row =  i - 1 < TOP  ? BOTTOM :  i - 1 ;
          if (Matrix[row][col] )
              i = ++i % MAXSIZE ;
          else {
                i = row ;
                j = j - 1 < LEFT ? RIGHT : --j ;
          }
          Matrix[i][j] = cnt ;
     }


 return ;
}

int main(void) {

    int Matrix[MAXSIZE][MAXSIZE] = {0} ;
    int i , j ;

    MagicBox(Matrix) ;

    for (i = 0 ; i < MAXSIZE ; i++) {
         for (j = 0 ; j < MAXSIZE ; j++)
              printf("%d " ,Matrix[i][j]) ;
         printf("\n") ;

    }




 return 0 ;
}


without further ado, let’s get started
2008-11-22 23:41
yylogo
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-14
收藏
得分:0 
zqy110007睡觉前,再次简化了代码,我帮他发一下:

main(){
int i,k,j,s=0;
for(i=1;i<=9;i++)
  for(k=i+1;k<=9;k++){
    j=15-i-k;
    if(j>=1 && j<=9 && j>=k && j!=k){
      printf("%d+%d+%d=15\n",i,k,j);
      s++;
    }
  }
printf("总共有%d种可能",s);
getch();
}

他和楼上的朋友在比赛,呵呵,一边帮别人,一边提高自己的水平,感谢这个论坛.这可惜,他网站的朋友不多,希望有人捧场.我是他的父亲兼徒弟.
2008-11-23 00:10
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
收藏
得分:0 
我也写个,大家指正
#include <stdio.h>
main()
{
    int a[9]={1,2,3,4,5,6,7,8,9};
    int i;
    int num=0;//计数
    int *p1;
    int *p2;
    int *p3;

    for(p1=a;p1<a+7;p1++)
    {
        for(p2=p1+1;p2<a+8;p2++)
        {
            for(p3=p2+1;p3<a+9;p3++)
            {
                if(*p1 + *p2 + *p3 ==15)
                {
                    num++;
                    printf("%d %d %d\n",*p1,*p2,*p3);
                }
            }
        }
    }

    printf("%d\n",num);
}
输出:
1 5 9
1 6 8
2 4 9
2 5 8
2 6 7
3 4 8
3 5 7
4 5 6
8
Press any key to continue

作鲲鹏,遨游于天地沧海
2008-11-23 00:28
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
iFreeBSD 在 2008-11-22 23:41 的发言:

这个题变相的求一个奇数幻方,算法的复杂度顶多O(n),至于输出,通过行列主次对角线即可。

你的答案是什么??好像错了..只有三组...

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-23 09:50
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
jdh99 在 2008-11-23 00:28 的发言:

我也写个,大家指正

还有一问题,你不需要定义i的,你的程序里好像没有出现i这个变量
我想问问...实在看不太懂你的思路..能否讲讲??

[[it] 本帖最后由 zqy110007 于 2008-11-23 09:56 编辑 [/it]]

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-23 09:54
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复 第24楼 jdh99 的帖子
看懂了...构思确实妙啊!!
佩服的五体投地..
把你的代码稍稍改了一下,只把格式改成了我自己喜欢的格式,然后帮你把i去掉了
程序代码:
#include <stdio.h>
int main(void){
int a[9]={1,2,3,4,5,6,7,8,9};
int num=0;
int *p1,*p2,*p3;
for(p1=a;p1<a+9;p1++)
  for(p2=p1+1;p2<a+9;p2++)
    for(p3=p2+1;p3<a+9;p3++)
      if(*p1+*p2+*p3 ==15){
        num++;
        printf("%d %d %d\n",*p1,*p2,*p3);
      }
printf("%d\n",num);
getch();
return 0;
}

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-23 10:03
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复 第24楼 jdh99 的帖子
根据你的程序,稍加修改了一下,我还是认为效率越高越好,所以就使用了二重循环,不过就把你原来多出来的i又加上了,但是同时也去掉了另一个指针*p3,程序如下


程序代码:
#include <stdio.h>
int main(void){
int a[9]={1,2,3,4,5,6,7,8,9};
int num=0,i;
int *p1,*p2;
for(p1=a;p1<a+9;p1++)
  for(p2=p1+1;p2<a+9;p2++){
    i=15-*p1-*p2;
    if(i<=9 && i>=*p2 && i!=*p2){
      num++;
      printf("%d %d %d\n",*p1,*p2,i);
    }
  }
printf("%d\n",num);
getch();
return 0;
}

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-23 10:11
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
看看我的,根据他们的改编的:
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{int cnt=0;
    for(int i=1;i<=9;i++)
        for(int j=i+1;j<9;j++)
            if(15-i-j>j&&15-i-j<=9)
            {printf("%d+%d+%d=15\n",i,j,15-i-j);cnt++;}
            printf("total number%d",cnt);
    return 0;
}
2008-11-23 10:47
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
不要多定义变量,浪费时间和空间!
2008-11-23 10:49
快速回复:请教一个简单的求和数列
数据加载中...
 
   



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

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