新手问题!哪个高手帮我看看这段代码什么地方出问题了,编译正确但执行的时候出错了!是我系统神了还是代码出错了 谢谢

hyjz 2004-06-15 04:40:58
#include"iostream.h"


int check(int x,int y,int *p_x,int *p_y,int c)
{ cout<<"1111"<<endl;
int i,line_1,line_2,line=x+y;
int flag=0;
for(i=0;i<c;i++)
{
line_1=((*(p_x+i))+(*(p_y+i)));
line_2=((*(p_x+i))-(*(p_y+i)));
if(x==(*(p_x+i))) {flag=1;break;}
if(y==(*(p_y+i))) {flag=1;break;}
if(line==line_1) {flag=1;break;}
if(line==line_2) {flag=1;break;}
else flag=0;
}
return flag;
}//条件合适返回0 否返回1


void main()
{
int queen_x[8],queen_y[8];//记录皇后坐标X,Y
int i,j,count=0,q,flag,flag_false=0;
int check(int x,int y,int *p_x,int *p_y,int c);
for(q=0;q<8;q++)
{
cout=0;
for(i=1;i<=8;i++)//遍历行
{
for(j=1+q;j<=9;j++)//遍历列
{
if (j>8) {flag_false=1;break;}
flag=1;
flag=check(i,j,queen_x,queen_y,count);
if(flag==0) {queen_x[q]=i;queen_y[q]=j;flag=1;count++;}//成功记录一个皇后位置第一个皇后位置编号为[0]
else continue;
if(flag==1) break;//皇后记录成功跳出本循环,重新遍历行
}//for j
if(flag_false==1) break;//行轮空 跳到下一种解法
}//for i

//if(count==8){

//}//for if
}//for q
for(i=0;i<count;i++)
{
cout<<"第"<<i<<"个皇后的位置是:"<<queen_x[i]<<","<<queen_y[i]<<endl;
}

}


...全文
175 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
langzi8818 2004-06-28
  • 打赏
  • 举报
回复
ding
hongfeeling 2004-06-28
  • 打赏
  • 举报
回复
ding
hyjz 2004-06-28
  • 打赏
  • 举报
回复
谢谢大家~ 我这里是益出了 后来换递归去了 没这个问题 谢谢 :)
Behard 2004-06-25
  • 打赏
  • 举报
回复
50% 机会出现溢出
yafizyh 2004-06-25
  • 打赏
  • 举报
回复
line_1=((*(p_x+i))+(*(p_y+i)));
line_2=((*(p_x+i))-(*(p_y+i)));
if(x==(*(p_x+i))) {flag=1;break;}
if(y==(*(p_y+i))) {flag=1;break;}
*(p_x+i)的意思是对int型指针变量*p_x的地址偏移i,再将以此处为首地址的内存转换为int数值。你有这样的需要吗?
是否应该为*p_x+i;
代码我看不懂。
LeayAo 2004-06-18
  • 打赏
  • 举报
回复
int check(int x,int y,int *p_x,int *p_y,int c);
调用这个函数时编译器就出错,指针出错,你们是怎么编译下去的呢?
Leaveye 2004-06-17
  • 打赏
  • 举报
回复
溢出倒是没看出来,
就是觉得你的循环不对。

我的理解,你本是试探第q+1个皇后,在第i行第j列可放与否。

可放的话,就存一个(x,y)坐标到queen_x,queen_y的下标为q的元素处,可这样的话,你总是在试探第1个皇后,从1.1到2.2到3.3到4.1到5.2,之后就结束了。

你仔细检查一下逻辑吧,追踪得我头好大~
yiana1002 2004-06-17
  • 打赏
  • 举报
回复
可是结果有点不可思议,可能出现溢出
yiana1002 2004-06-17
  • 打赏
  • 举报
回复
以下程序在DEV C++下通过编译并运行

#include <iostream>
#include <cstdlib>
using namespace std;

int check(int x,int y,int *p_x,int *p_y,int c)
{ cout<<"1111"<<endl;
int i,line_1,line_2,line=x+y;
int flag=0;
for(i=0;i<c;i++)
{
line_1=((*(p_x+i))+(*(p_y+i)));
line_2=((*(p_x+i))-(*(p_y+i)));
if(x==(*(p_x+i))) {flag=1;break;}
if(y==(*(p_y+i))) {flag=1;break;}
if(line==line_1) {flag=1;break;}
if(line==line_2) {flag=1;break;}
else flag=0;
}
return flag;
}//条件合适返回0 否返回1


int main()
{
int queen_x[8],queen_y[8];//记录皇后坐标X,Y
int i,j,count=0,q,flag,flag_false=0;
int check(int x,int y,int *p_x,int *p_y,int c);
for(q=0;q<8;q++)
{
for(i=1;i<=8;i++)//遍历行
{
for(j=1+q;j<=9;j++)//遍历列
{
if (j>8) {flag_false=1;break;}
flag=1;
flag=check(i,j,queen_x,queen_y,count);
if(flag==0) {queen_x[q]=i;queen_y[q]=j;flag=1;count++;}//成功记录一个皇后位置第一个皇后位置编号为[0]
else continue;
if(flag==1) break;//皇后记录成功跳出本循环,重新遍历行
}//for j
if(flag_false==1) break;//行轮空 跳到下一种解法
}//for i

//if(count==8){

//}//for if
}//for q
for(i=0;i<count;i++)
{
cout<<"第"<<i<<"个皇后的位置是:"<<queen_x[i]<<","<<queen_y[i]<<endl;
}
system("pause");
return 0;
}
Leaveye 2004-06-17
  • 打赏
  • 举报
回复
cout=0;

这句也能通过啊?
CsdnRob 2004-06-17
  • 打赏
  • 举报
回复
顶,这个问题我很感兴趣!


----------------------------
CSDN一号机器人
hyjz 2004-06-15
  • 打赏
  • 举报
回复
晕~ 排版有点乱了~ 不好意思~ ^_^
hyjz 2004-06-15
  • 打赏
  • 举报
回复
晕~ 排版有点乱了~ 不好意思~ ^_^

64,690

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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