当前位置: 代码迷 >> C语言 >> 看一个小学一年级的数学题,数组
  详细解决方案

看一个小学一年级的数学题,数组

热度:161   发布时间:2006-05-13 07:10:00.0
看一个小学一年级的数学题,数组
有一些数,21、22……29,这9个数填到横着有三个圈,竖着有三行共九个圈的图中
让其横、竖、斜着相加都是相等的75。有几种填法。要是分别试一下也可以但小学生很难,那位高手出手编写个。我想了一下是不是可以把9个数放到一维数组织中,随即调用组合并符值给一个二位数组,在验证是不是符合条件,最后输出。
搜索更多相关的解决方案: 数学题  小学  组织  条件  

----------------解决方案--------------------------------------------------------
1,2,……,9,填到3*3方格中,横竖斜相加都是15,然后每个数加上20;
这个问题就完全等价于3阶魔方阵!!!
晕死!这种问题自己论坛上找!
----------------解决方案--------------------------------------------------------
[IMG]C:\Documents and Settings\Administrator\My Documents\My Pictures[/IMG]
----------------解决方案--------------------------------------------------------

个人感觉2楼soft_wind你C语言很强~想加你好友,报上QQ来~
还有我也仔细想了一下3阶魔方阵的编程思路~
先定义一个a[3][3],然后让计算机随机复值1-9给a[3][3]并保证没重复重复数字
然后这样

[IMG]C:\Documents and Settings\Administrator\My Documents\My Pictures\魔方阵.bmp[/IMG]
不知道可否实现输出?
----------------解决方案--------------------------------------------------------
返回的方法可用goto语句
----------------解决方案--------------------------------------------------------
就是一个3阶幻方的问题!
看一个例子把(奇数次幻方);
算法是这样的:
1.先将1放在第一行的中间位置。
2.从“2”开始直到N*N止,各数依次按下列规则放数:每个数放的行在前一个数的行数减1,列数加1.
3.如果上一个数的行数为1,则下一个数的行数为最后一行。当上一个数的列数为最后一列时,下一个列数为第一列。
4.如果下一个数应放的位置已被占,则下一个数放在上一个数的下面。

main()
{ int a[19][19],i,j,k,m,n,p;
p=1;
while(p==1)
{ printf("\n\n The program of print a 19*19 bewitching phalanx\n\n");
printf("Enter n (n is a odd number from 1 to 19):> ");
scanf("%d",&n);
if((n!=0)&&(n<=19)&&(n%2==1))
p=0;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
j=n/2;
a[0][j]=1;
for(k=2;k<=n*n;k++)
{ i=i-1;
j=j+1;
if((i<0)&&(j>n-1))
{ i=i+2;
j=j-1;
}
else
{ if(i<0)
i=n-1;
if(j>n-1)
j=0;
}
if(a[i][j]==0)
a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
}
}
printf("\n");
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\nThank you to use the program ! Pass any key to exit ...");
delay(20);
getch();
}

----------------解决方案--------------------------------------------------------
以下是引用xiaxia421在2006-5-13 15:46:00的发言:
就是一个3阶幻方的问题!
看一个例子把(奇数次幻方);
算法是这样的:
1.先将1放在第一行的中间位置。
2.从“2”开始直到N*N止,各数依次按下列规则放数:每个数放的行在前一个数的行数减1,列数加1.
3.如果上一个数的行数为1,则下一个数的行数为最后一行。当上一个数的列数为最后一列时,下一个列数为第一列。
4.如果下一个数应放的位置已被占,则下一个数放在上一个数的下面。

main()
{ int a[19][19],i,j,k,m,n,p;
p=1;
while(p==1)
{ printf("\n\n The program of print a 19*19 bewitching phalanx\n\n");
printf("Enter n (n is a odd number from 1 to 19):> ");
scanf("%d",&n);
if((n!=0)&&(n<=19)&&(n%2==1))
p=0;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
j=n/2;
a[0][j]=1;
for(k=2;k<=n*n;k++)
{ i=i-1;
j=j+1;
if((i<0)&&(j>n-1))
{ i=i+2;
j=j-1;
}
else
{ if(i<0)
i=n-1;
if(j>n-1)
j=0;
}
if(a[i][j]==0)
a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
}
}
printf("\n");
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\nThank you to use the program ! Pass any key to exit ...");
delay(20);
getch();
}

这个有意思,不错啊,我要去好好看看。
----------------解决方案--------------------------------------------------------

以下是引用工藤♀新一在2006-5-13 15:05:00的发言:

2楼soft_wind想加你好友,报上QQ来~

不好意思,上次没看到您这帖子,我是很乐意交朋友的,希望一起讨论的朋友可以加我qq:113669756
----------------解决方案--------------------------------------------------------
  相关解决方案