| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1955 人关注过本帖
标题:一个给数组赋值的题 给大家做一下
只看楼主 加入收藏
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

公布答案啊


2007-05-26 22:21
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 
等答案不好的,还是自己亲手做做

2007-05-26 22:26
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 

#include<stdio.h>
int main()
{
int i,j,n=0,m,N=2,a[6][7]={0},k=0;
i=6/2-1;j=7/2;
while(k<3)
{
m=(n%10)/2+1+n/10*5+j;
for(--N;j<=m;j++)
a[i][j]=N++;
n++;
m=(n%10)/2+1+n/10*5+i;
for(--N,--j;i<=m;i++)
a[i][j]=N++;
n++;

m=j-((n%10)/2+1+n/10*5);
for(--i,--N;j>=m;j--)
a[i][j]=N++;
n++;
j=m;

m=i-((n%10)/2+1+n/10*5);
for(--N;i>=m;i--)
a[i][j]=N++;
n++;
i=m;
k++;
}
for(i=0;i<6;puts(""),i++)
for(j=0;j<7;j++)
printf("%3d",a[i][j]);
return 0;
}

#include<stdio.h>
#define F(n) ((n)%10)/2+1+(n)/10*5
int main()
{
int i,j,n=0,m,N=2,a[6][7]={0};
i=6/2-1;j=7/2;
while(N<=42)
{
m=F(n)+j;
for(--N;j<=m;j++)
a[i][j]=N++;
n++;
m=F(n)+i;
for(--N,--j;i<=m;i++)
a[i][j]=N++;
n++;

m=j-(F(n));
for(--i,--N;j>=m;j--)
a[i][j]=N++;
n++;
j=m;

m=i-(F(n));
for(--N;i>=m;i--)
a[i][j]=N++;
n++;
i=m;
}
for(i=0;i<6;puts(""),i++)
for(j=0;j<7;j++)
printf("%3d",a[i][j]);
return 0;
}

[此贴子已经被作者于2007-5-27 10:24:53编辑过]


2007-05-26 23:48
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 

这个是我写的
主要思想就是叫数组来进行 向下 向右 向上 向左 的 移动
#include<stdio.h>
main()
{
int x=0,y=0,i=42,c,b;
int a[6][7]={0};
a[x][y]=i;
while((i--)>1)
{
if(a[x+1][y]==0&&(x+1)<6)
a[++x][y]=i;
else if(a[x][y+1]==0&&(y+1)<7)
a[x][++y]=i;
else if(a[x-1][y]==0&&(x-1)!=-1)
a[--x][y]=i;
else if(a[x][y-1]==0&&(y-1)!=-1)
{
while(a[x][y-1]==0)
a[x][--y]=i--;
i++;
}

}
for(c=0;c<6;c++){
for(b=0;b<7;b++)
printf("%3d",a[c][b]);
printf("\n");
}
}

[此贴子已经被作者于2007-5-27 3:07:30编辑过]


羊肉串 葡萄干 哈密瓜!!
2007-05-27 03:03
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
无玩过界 for(i=0;i<6;puts(""),i++)
学习拉 嘿嘿

羊肉串 葡萄干 哈密瓜!!
2007-05-27 03:04
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

注意:M可以等于N,或者M比N小1(比如M=8时,N可以等于8或者9)


#include <stdio.h>
#define M 8
#define N 9

int x[4] = {0, 1, 0, -1};
int y[4] = {1, 0, -1, 0};

int main()
{
int a[M][N], t, k, flag = 1;
int i = (M - 1) / 2, j = (N - 1) / 2;

a[i][j] = 1;
k = 2;
for (t = 1; flag; t += 2)
{
int p, q;
for (p = 0; p < 4 && flag; p++)
for (q = 0; q < t + p/2; q++)
{
i += x[p];
j += y[p];
a[i][j] = k++;
if (k > M * N)
{
flag = 0;
break;
}
}
}

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

return 0;
}


2007-05-27 10:06
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 

回mp3aaa ,速度上没有什么不同,可能指令长度长点


2007-05-27 10:27
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

总结一下:

(1)右下旋
当:
int x[4] = {0, 1, 0, -1};
int y[4] = {1, 0, -1, 0};
int i = (M - 1) / 2, j = (N - 1) / 2;

结果为:
42 21 22 23 24 25 26
41 20 7 8 9 10 27
40 19 6 1 2 11 28
39 18 5 4 3 12 29
38 17 16 15 14 13 30
37 36 35 34 33 32 31

(2)左下旋
当:
int x[4] = {0, 1, 0, -1};
int y[4] = {-1, 0, 1, 0};
int i = (M - 1) / 2, j = N / 2;

结果为:
26 25 24 23 22 21 42
27 10 9 8 7 20 41
28 11 2 1 6 19 40
29 12 3 4 5 18 39
30 13 14 15 16 17 38
31 32 33 34 35 36 37

(3)右上旋
当:
int x[4] = {0, -1, 0, 1};
int y[4] = {1, 0, -1, 0};
int i = M / 2, j = (N - 1) / 2;

结果为:
37 36 35 34 33 32 31
38 17 16 15 14 13 30
39 18 5 4 3 12 29
40 19 6 1 2 11 28
41 20 7 8 9 10 27
42 21 22 23 24 25 26

(4)左上旋
当:
int x[4] = {0, -1, 0, 1};
int y[4] = {-1, 0, 1, 0};
int i = M / 2, j = N / 2;

结果为:
31 32 33 34 35 36 37
30 13 14 15 16 17 38
29 12 3 4 5 18 39
28 11 2 1 6 19 40
27 10 9 8 7 20 41
26 25 24 23 22 21 42

注:M可以等于N,或者M比N小1(以上结果为M=6,N=7)


2007-05-27 11:08
起点线
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-12-7
收藏
得分:0 
#include <stdio.h>
void main()
{
int num[6][7];
int i=0,j=0,k=42;
int fx=0; /* 0向下, 1向右, 2向上, 3向左 */
while(k>0)
{
num[i][j]=k;
k--;
switch(fx)
{
case 0: i++; if(i==5-j) fx=1; break;
case 1: j++; if(j==6-(5-i)) fx=2; break;
case 2: i--; if(i==5-(j-1)) fx=3; break;
case 3: j--; if(j==1+i) fx=0; break;
}
}
for(i=0;i<6;i++)
{
for(j=0;j<7;j++)
printf("%4d",num[i][j]);
printf("\n");
}
}

2007-05-27 20:17
起点线
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-12-7
收藏
得分:0 
昨天晚上就写出来了.不知道什么原因一直发不了贴...

2007-05-27 20:18
快速回复:一个给数组赋值的题 给大家做一下
数据加载中...
 
   



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

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