| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 565 人关注过本帖
标题:小弟写的蛇形填数程序,大神来完善一下吧
只看楼主 加入收藏
qq770903321
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-1-25
收藏
 问题点数:0 回复次数:9 
小弟写的蛇形填数程序,大神来完善一下吧
/*我说的蛇形数指这样的矩阵(n<10):      7    8   1
                                        6    9   2
                                        5    4   3    (n=3)
   我的算法是先写一个10*10矩阵,每个元素都置零,然后循环判断(只判断从a[1][1]到a[n][n])按制定规则处理,直到标志数flag不为零时结束。我的flag是int时,当n<=5时正确,但当n>=6时是死循环,flag总是0.(这里我不明白为什么,我猜是flag溢出???)后来我把flag改成double就对了。有没有保持flag是int 的别的巧妙的办法呢?*/
//蛇形填数
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main()
{
    int n,i,j,k,l;
    double  flag=0;
    int a[10][10];
    scanf("%d",&n);
    for(i=0;i<10;i++)
    for(j=0;j<10;j++)
    a[i][j]=0;
    a[1][n]=1;
    while((flag-0)<=0.00001)
     {
       for(i=1;i<=n;i++)
       for(j=1;j<=n;j++)
       {
             if((a[i][j]>0)&&(a[i+1][j]==0)&&(a[i][j+1]==0)&&(a[i-1][j]==0)&&(a[i][j-1]==0))
             a[i+1][j]=a[i][j]+1;//1.第一个元素的处理
             else if((a[i][j]>0)&&(a[i][j-1]==a[i][j]-1)&&(a[i+1][j]==0)&&(a[i+2][j]==0)&&(a[i][j+1]==0))
             a[i][j+1]=a[i][j]+1;//下边两个零时向右增加,如n=6时23到24
             else if((a[i][j]>0)&&(a[i][j+1]==a[i][j]+1)&&(a[i+1][j]==0))
            ;
             else if((a[i][j]>0)&&(a[i-1][j]>0)&&(a[i+1][j]==0)&&(i!=j))
             a[i+1][j]=a[i][j]+1;//2.
             else if((a[i][j]>0)&&(a[i-1][j]>0)&&(a[i][j-1]==0)&&(i==j))
             a[i][j-1]=a[i][j]+1;//3
             else if((a[i][j]>0)&&(a[i][j+1]==a[i][j]-1)&&(a[i][j-1]==0)&&((i+j)!=(n+1)))
             a[i][j-1]=a[i][j]+1;//4.要补充:&&(a[i+1][j]!=a[i][j]+1)?
             else if((a[i][j]>0)&&(a[i][j]==a[i][j+1]+1)&&(a[i-1][j]==0)&&(i+j==(n+1)))
             a[i-1][j]=a[i][j]+1;//5.
             else if((a[i][j]>0)&&(a[i+1][j]==a[i][j]-1)&&(a[i-1][j]==0)&&(i!=j))
             a[i-1][j]=a[i][j]+1;//6
             else if((a[i][j]>0)&&(a[i+1][j]==a[i][j]-1)&&(a[i][j+1]==0)&&(i==j))
             a[i][j+1]=a[i][j]+1;//7
             else if((a[i][j]>0)&&(a[i][j-1]==a[i][j]-1)&&(a[i][j+1]==0)&&(i+j!=n))
             a[i][j+1]=a[i][j]+1;//8
             else if((a[i][j]>0)&&(a[i][j]==a[i][j-1]+1)&&(a[i+1][j]==0)&&(i+j==n))
             a[i+1][j]=a[i][j]+1;//9
             else
             ;
             else if((a[i][j]>0)&&(a[i][j+1]>0)&&(a[i][j-1]==0)&&((i+j)!=(n+1))&&(a[i+1][j]==a[i][j]+1))
             ;//&Igrave;&Oslash;&Ecirc;&acirc;2*/
             flag=1.0;
             for(k=1;k<=n;k++)
             {
                for(l=1;l<=n;l++)
               {
                  printf("%-3d ",a[k][l]);
                  flag=(flag*a[k][l]);
               }
               printf ("\n");
            }
            printf ("\n");
            printf("%lf\n",flag);

      }
     }
    printf("consequence:\n");
     for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
           printf("%-3d ",a[i][j]);
        printf ("\n");

    }
   
    return 0;
}


[ 本帖最后由 qq770903321 于 2013-1-26 21:13 编辑 ]
搜索更多相关主题的帖子: include double 元素 
2013-01-26 20:50
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
支持下。。

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-26 21:23
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:0 
还蛮复杂的。。。。。。。。不过支持,支持原创!!!

有心者,千方百计;无心者,千难万难。
2013-01-26 21:29
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:0 
不知道为什么楼主的程序我这编译有错,看下面的程序跟你说的一样否



#include <stdio.h>
#define N 100
main()
{
    int a[N][N],i,j,k=0,m,n;
    printf("please enter n(n<100):\n");
    scanf("%d",&n);
    if(n%2==0)  m=n/2;
    else m=n/2+1;
    for(i=0;i<m;i++)
    {
        for(j=i;j<n-i;j++)
        {k++;a[i][j]=k;}
        for(j=i+1;j<n-i;j++)
        {k++;a[j][n-i-1]=k;}
        for(j=n-i-2;j>=i;j--)
        {k++;a[n-i-1][j]=k;}
        for(j=n-i-2;j>=i+1;j--)
        {k++;a[j][i]=k;}
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        printf("%5d",a[i][j]);
        printf("\n");
    }
}
2013-01-26 23:51
qq770903321
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-1-25
收藏
得分:0 
回复 4楼 tompobing
额,不好意思,编辑的时候少删了两行(else后边的两行)。
你的蛇形数是从第一行第一个数开始的,而我的是从第一行最后一个数开始的,不一样。
不过你的算法很好呀。好快。我再努力努力,用这个算法再写一次。
2013-01-27 21:45
qq770903321
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-1-25
收藏
得分:0 
//蛇形填数——2
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
{
    int a[N][N];
    int n,m,i,j,k=0;
    printf("Please input n(n<100):");
    scanf("%d",&n);
    if(n%2==0)   m=n/2;
    else m=n/2+1;
    for(i=0;i<m;i++)
    {
        for(j=i;j<n-i;j++)
        {
            k++;
            a[j][n-i-1]=k;
        }
        for(j=n-i-2;j>=i;j--)
        {
            k++;
            a[n-i-1][j]=k;
        }
        for(j=n-i-2;j>=i;j--)
        {
            k++;
            a[j][i]=k;
        }
        for(j=i+1;j<=n-i-2;j++)
        {
            k++;
            a[i][j]=k;
        }


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


    printf("Hello world!\n");
    return 0;
}
2013-02-08 15:15
qq770903321
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-1-25
收藏
得分:0 
//蛇形填数——2
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
{
    int a[N][N];
    int n,m,i,j,k=0;
    printf("Please input n(n<100):");
    scanf("%d",&n);
    if(n%2==0)   m=n/2;
    else m=n/2+1;
    for(i=0;i<m;i++)
    {
        for(j=i;j<n-i;j++)
        {
            k++;
            a[j][n-i-1]=k;
        }
        for(j=n-i-2;j>=i;j--)
        {
            k++;
            a[n-i-1][j]=k;
        }
        for(j=n-i-2;j>=i;j--)
        {
            k++;
            a[j][i]=k;
        }
        for(j=i+1;j<=n-i-2;j++)
        {
            k++;
            a[i][j]=k;
        }


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


    printf("Hello world!\n");
    return 0;
}
2013-02-08 15:15
赤血之魂
Rank: 2
等 级:论坛游民
帖 子:109
专家分:86
注 册:2012-3-22
收藏
得分:0 
支持!!!

让平淡诉说非凡!
2013-02-08 15:19
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:0 
蛇形数组我上次在手机上写完测试通过,没带内存卡啊。。。。
记得我写的时候很形象化,加入了判断行进方向等很多变量
2013-02-08 15:25
大米稀粥客
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:155
注 册:2013-1-8
收藏
得分:0 
学习
2013-02-08 20:23
快速回复:小弟写的蛇形填数程序,大神来完善一下吧
数据加载中...
 
   



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

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