标题:一个好玩的c语言设计测试(鄙人用了一周搞定)(会数组和循环的就可以)
只看楼主
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
得分:0 
回复 20楼 kingfuture
这个呢?
程序代码:
#include <stdio.h>

 int fun(int x,int y,int n)

 {
     if(x==n) return 3*n-y-1;
     if(x==1) return y;
     if(y==1&&x>=2&&x<=n-1) return 4*n-2-x;
     if(y==n&&x>=2&&x<=n-1) return y+x-1;
     return fun(x-1,y-1,n-2)+4*(n-1);

 }

 int main()

 {
     int x,y,n;
     scanf("%d",&n);
     for(y=1;y<=n;y++)
     {
         for(x=1;x<=n;x++)
         printf("%-6d",fun(y,x,n));
         printf("\n");
     }
     return 0;

 }


2012-08-14 08:57
神之驱逐
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:136
专家分:436
注 册:2011-11-22
得分:0 
进来逛一下。

你在努力,你就在进步!
2012-08-14 10:47
YanXi_528
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2012-8-14
得分:0 
程序代码:
#include<stdio.h>
int main()
{
    int num,m,n;        //方阵长num,控制移动次数m,上限移动次数n
    int anum=1,i=0,j=-1;        //填充数anum,行标i,列标j
    int t=-1,mx,a[100][100]={0};    //控制方向t,总次数mx
    scanf("%d",&num);
    n=num;    //第一次横着走1,2,3,4,5是5次
    mx=num*num;        //中心数字max
    while(anum<=mx)
    {
        t=-t;j=j+t;        //i=0,j=0,方向t=1(正方向)
        for(m=0;m<n;m++)    //横向走动
        {
            a[i][j]=anum;
            anum++;j=j+t;
        }
        //if(anum>mx) break;
        i=i+t;j=j-t;    //跳转到下一准备填充数字的坐标
        n--;    //每当横向走完,移动次数-1
        for(m=0;m<n;m++)    //纵向走动
        {
            a[i][j]=anum;
            anum++;i=i+t;
        }
        i=i-t;    //第一次走完,该向负方向走动,这里和开头共同控制跳转
    }
    //输出
    for(i=0;i<num;i++)
    {
        for(j=0;j<num;j++)
            printf("%3d ",a[i][j]);
        printf("\n");
    }
    return 0;
}
2012-08-14 15:34
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
得分:0 
哈哈路过顶一下
2012-08-14 16:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-374489-1-1.html




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

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