请教大牛,哪里出错了???thx

[复制链接]
查看11 | 回复7 | 2021-1-29 05:13:14 | 显示全部楼层 |阅读模式
#include stdio.h
int main()
{
int num[100][100];
int row;
int col;
int i;
int j;
int time=0;
int n;
scanf(%d%d,row,col);
for(i=0;irow;i++){
for(j=0;jcol;j++){
scanf(%d,num[j]);
}
}
for(n=0;;n++){
if(n+1!=col-n-1){
for(j=n;jcol-n-1;j++){
printf(%d\n,num[n][j]);
time+=1;
}
if(time==col*row){
break;
}
}

if(n+1!=row-n-1){
for(i=n;irow-n-1;i++){
printf(%d\n,num[col-n-1]);
time+=1;
}
if(time==col*row){
break;
}
}
if(n+1!=col-n-1){
for(j=col-n-1;jn;j--){
printf(%d\n,num[row-n-1][j]);
time+=1;
}
if(time==col*row){
break;
}
}
if(n+1!=row-n-1){
for(i=row-n-1;in;i--){
printf(%d\n,num[n]);

time+=1;
}

if(time==col*row){
break;
}
}
}
return 0;
}
回形遍历的code,哪里出问题了???遇到35的情况就会多输出。。。一周了debug。。。。。。



回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
自己加log看一下吧没注释我也不知道你的做法foxmarshall (爱迪生的结晶) 在 ta 的帖子中提到:code#includestdio.hintmain(){intnum[100][100];introw;intcol;inti;intj;inttime=0;intn;scanf(%d%d,row,col);for(i=0;irow;i++){for(j=0;jcol;j++){scanf(%d,num[j]);}}for(n=0;;n++){if(n+1!=col-n-1){for(j=n;jcol-n-1;j++){printf(%d\n,num[n][j]);time+=1;}if(time==col*row){break;}}if(n+1!=row-n-1){for(i=n;irow-n-1;i++){printf(%d\n,num[col-n-1]);time+=1;}if(time==col*row){break;}}if(n+1!=col-n-1){for(j=col-n-1;jn;j--){printf(%d\n,num[row-n-1][j]);time+=1;}if(time==col*row){break;}}if(n+1!=row-n-1){for(i=row-n-1;in;i--){printf(%d\n,num[n]);time+=1;}if(time==col*row){break;}}}return0;}/code回形遍历的code,哪里出问题了???遇到35的情况就会多输出。。。一周了debug。。。。。。

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
伊的思路我也没看懂。
输出了一下,4*4结果也不对吧……
用这种思路容易理解点,四个循环:
11111114111112441112243333223333332flfiiiu ((^_^)==(T.T)) 在 ta 的帖子中提到:自己加log看一下吧没注释我也不知道你的做法

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
1那些if(n+1!=col-n-1)对col是奇数的时候完全没有用(一直true)对偶数的时候也似乎不是很有用去掉就好了
2判断退出的时候有时在内层循环里time就超过col*row了简单的办法是(不考虑效率)放到内层循环里然后把break改成return0
3如果在外层循环刚开始时只剩下一个数(在col=row=奇数的时候会出现)按原来的算法它不会属于任何一个内层循环简单的办法是在外层循环刚开始的时候判断if(time+1==col*row)如果是就打印退出
然后就对了~
foxmarshall (爱迪生的结晶) 在 ta 的帖子中提到:code#includestdio.hintmain(){intnum[100][100];introw;intcol;inti;intj;inttime=0;...........................

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
赞耐心哇!:-)unix (小幽|!3W!3W55!W) 在 ta 的帖子中提到:1那些if(n+1!=col-n-1)对col是奇数的时候完全没有用(一直true)对偶数的时候也似乎不是很有用去掉就好了2判断退出的时候有时在内层循环里time就超过col*row了简单的办法是(不考虑效率)放到内层循环里然后把break改成return03如果在外层循环刚开始时只剩下一个数(在col=row=奇数的时候会出现)按原来的算法它不会属于任何一个内层循环...........................

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
你不需要去控制每次在每个方向上的移动步数只需要把走过的地方赋值为一个-1什么的,以后遇到-1就拐弯。
flfiiiu ((^_^)==(T.T)) 在 ta 的帖子中提到:自己加log看一下吧没注释我也不知道你的做法

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
然后再加个边框,于是就简单了XS (~~~~) 在 ta 的帖子中提到:你不需要去控制每次在每个方向上的移动步数只需要把走过的地方赋值为一个-1什么的,以后遇到-1就拐弯。

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
re,况且lz发帖提问缩进还不做好。
flfiiiu ((^_^)==(T.T)) 在 ta 的帖子中提到:自己加log看一下吧没注释我也不知道你的做法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行