数学建模社区-数学中国
标题:
大家来练习4
[打印本页]
作者:
为你奋斗
时间:
2010-3-10 21:01
标题:
大家来练习4
本帖最后由 为你奋斗 于 2010-3-10 21:16 编辑
http://flashupload/swf/1003101315353ky4e88b1r2a.jpg
作者:
为你奋斗
时间:
2010-3-11 15:22
怎么没有做的?这可是我自己出的题!
作者:
sobolev
时间:
2010-3-11 18:21
标题:
key to problem4(matlab7.6.0/winxp)
本帖最后由 sobolev 于 2010-3-11 18:31 编辑
function y=luoxuanzhen(x)
y=zeros(x,x);
temp=0;
a=0;
for ind=1:floor(x/2);
temp=1:x-2*ind+1;
y(ind,ind:end-ind)=4*a+temp;
y(ind:end-ind,end-ind+1)=4*a+temp(end)+temp;
y(end-ind+1,ind+1:end-ind+1)=4*a+2*temp(end)+fliplr(temp);
y(ind+1:end-ind+1,ind)=4*a+3*temp(end)+fliplr(temp);
a=a+temp(end);
end
if (mod(x,2)==1);
y(ceil(x/2),ceil(x/2))=x.^2;
end
作者:
lxgjianmo
时间:
2010-3-11 18:44
辛苦了,啊哈哈哈哈!!!!!!!!!!!!!!!!
作者:
数学者
时间:
2010-3-11 19:34
本帖最后由 数学者 于 2010-3-11 20:08 编辑
这题不难,由于工作比较忙,没多少空余时间来写程序,在这里我就把思路给说一下:
1、定义一个n*n的二维长整形数组;
2、对于输入n,可以证明输出结果一定有[(n+1)/2]圈(注:[]表示向零取整);
3、采取由外圈到内圈赋值的方法,将圈数由外往内记为第1,2,...,[(n+1)/2]圈,对于第 i(i>1) 圈,左上角的值为第 i-1 圈左上角的值加上 4(n-2(i-2));
4、采取顺时针的方法对每一圈进行赋值,这个过程可以用循环很快解决;
5、设一个外循环,依次对第 i 圈进行赋值。
就可以实现输出的结果了,呵呵~
作者:
nwave
时间:
2010-3-11 20:42
二楼的做法略显复杂,可以用模除的方法,更为简单。。。。。。。。。。。。。。。
作者:
为你奋斗
时间:
2010-3-12 18:26
回复
3#
sobolev
应该用C的,matlab功能太强大了。比如magic(3),但是用C编程难度就大了。。。
作者:
6601750
时间:
2010-3-12 21:19
呵呵 专做简单的。。方法和5楼的差不多。声明a[n][n]数组 分别从四个边依次赋值
代码很简单
#include<stdio.h>
int a[100][100];
void main()
{
int i,j,x,k,m,n,nn,b;
i=0;j=0;m=1;
printf("Enter n:");
scanf("%d",&n);
nn=n*n;
x=n-1;
for(b=0;b<=nn;b++)
{
for(k=0;k<x;k++)
{
a[i][j]=m;
m++;
j++;
}
for(k=0;k<x;k++)
{
a[i][j]=m;
m++;
i++;
}
for(k=0;k<x;k++)
{
a[i][j]=m;
m++;
j--;
}
for(k=0;k<x;k++)
{
a[i][j]=m;
m++;
i--;
}
i++;j++;
x=x-2; /*下一圈的时候 每个边少了两个点*/
if(x==0) /*因为x=n-1,当x=0的时候 实际上还有一个点没赋值*/
x=1;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
getch();
}
作者:
李——建辉
时间:
2012-1-13 08:24
没有体力啦,资料能发给我一份吗?我的邮箱是18633525948圈163邮箱,谢啦
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5