6小时没看出来哪错了!帮忙菜! ̄ ̄

TONY82 2002-10-30 02:06:49
X代表为知数,在2.4.6.8中找一数换掉X,使其行,例,对角线三数之和等于15
   x 1 x
   3 5 7 
x 9 x
------------------------------

#include <stdio.h>
main()
{
long int a[4]={2,4,6,8};
long int b[4]={2,4,6,8};
long int c[4]={2,4,6,8};
long int d[4]={2,4,6,8};
int i,j,k,m=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
for(m=0;m<4;m++)
if(a[i]+1+b[j]==15 && a[i]+3+c[k]==15 && c[k]+9+d[m]==15 && b[j]+7+d[m]==15);
printf("%ld 1 %ld\n3 5 7\n%ld 9 %ld\n",a[i],b[j],c[k],d[m]);
}
...全文
24 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
flash_sword82 2002-10-30
  • 打赏
  • 举报
回复
声明上面的算法只对本题适用
要是全搜的话就得考虑对角线等等问题了
flash_sword82 2002-10-30
  • 打赏
  • 举报
回复
紧对这个问题给出下面算法
void main() {
int i;
int a,b,c,d;
for(i=1;i<=4;i++){
a = 2*i;
b = 15-1-a;
c = 15-b-7;
d = 15-a-3;
if(b>0 && c>0 && d>0)
printf("%d %d %d %d\n",a,b,c,d);
}
}
这样问题就解决了
你自己设计一个输出就行了
但要是9个数的位置都不知道你就只有搜或是解方程了
feng234 2002-10-30
  • 打赏
  • 举报
回复
if后多了“;”
而且算法不但不好,还没有考虑对角线之和的问题!
间谍 2002-10-30
  • 打赏
  • 举报
回复
所以还是if加{}好
间谍 2002-10-30
  • 打赏
  • 举报
回复
呵呵,这个错误如果程序比较长的话真是有点难看.
goodname 2002-10-30
  • 打赏
  • 举报
回复
呵呵,这6个小时,都看杀了?
huangyq 2002-10-30
  • 打赏
  • 举报
回复
粗心
和我一样
rty 2002-10-30
  • 打赏
  • 举报
回复
:-)
chengdulang 2002-10-30
  • 打赏
  • 举报
回复
上面的说的对啊。就是if后面多了";"
vanhui 2002-10-30
  • 打赏
  • 举报
回复
晕倒,第一次见到这么冗余的算法。
ccaommao 2002-10-30
  • 打赏
  • 举报
回复
up
agipenia 2002-10-30
  • 打赏
  • 举报
回复
很懒的算法,象印度程序员。
fengzheng 2002-10-30
  • 打赏
  • 举报
回复
都说的对
我不废话了
baryjim 2002-10-30
  • 打赏
  • 举报
回复
印度程序员怎么了,印度的软件这么强,你们谁不服

耙子 2002-10-30
  • 打赏
  • 举报
回复
这个算法太差了!
需要循环 4*4*4*4次,
起始一个循环就够了,只需要循环4次

   a 1 b
   3 5 7 
d 9 c
左上角的a确定了,其次的3 个角就也唯一了,顺时针分别是
b=15-a-1
c=15-b-7
d=15-a-3
检查abcd是否在2,4,6,8的集合内,还一个条件就是对角线的和
a+5+c=15
b+5+d=15
这从算法上最高效的。
程序的色彩 2002-10-30
  • 打赏
  • 举报
回复
if语句后面没有";"号.
lilu207 2002-10-30
  • 打赏
  • 举报
回复
除了if后不能有“;”外,你的算法也不太科学,下面是我写的语句,或许对你有帮助:
#include <stdio.h>
main()
{ int i,j,k,m;
int a[4]={2,4,6,8},
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
for(m=0;m<4;m++)
if(a[i]+1+a[j]==15 && a[i]+3+a[k]==15 && a[k]+9+a[m]==15 && a[j]+7+a[m]==15)
printf("%ld 1 %ld\n3 5 7\n%ld 9 %ld\n",a[i],a[j],a[k],a[m]);
}

labkler 2002-10-30
  • 打赏
  • 举报
回复
还有一点,本题有必要用long吗?
资源能省则省,不要太浪费,
不然…………
嘿嘿。。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧