希望大佬们指导一下!我知道我程序后面模拟部分有问题,但我不知道该怎么去改?

姝歌 2021-03-31 03:19:19
#include <stdio.h> int main() { int a, b = 1, i, j, aa[7][7], c[7]; scanf("%d\n", &a); while (a > 0) { for (j = 1; j <= 2; j++) { scanf("%s", c); aa[j][3] = c[0] - '0'; aa[j][4] = c[1] - '0'; aa[j][5] = c[2] - '0'; } for (j = 3; j <= 5; j++) { scanf("%s", c); aa[j][1] = c[0] - '0'; aa[j][2] = c[1] - '0'; aa[j][3] = c[2] - '0'; aa[j][4] = c[3] - '0'; aa[j][5] = c[4] - '0'; aa[j][6] = c[5] - '0'; aa[j][7] = c[6] - '0'; } for (j = 6; j <= 7; j++) { scanf("%s", c); aa[j][3] = c[0] - '0'; aa[j][4] = c[1] - '0'; aa[j][5] = c[2] - '0'; } for (i = 3; i <= 5; i++) { for (j = 1; j <= 2; j++) { if (aa[i][j] == 1) { if (aa[i][j + 1] == 1 && aa[i][j + 2] == 0) b = 0; if (aa[i + 1][j] == 1 && (aa[i + 2][j] == 0 || aa[i - 1][j] == 0)) b = 0; } } for (j = 6; j <= 7; j++) { if (aa[i][j] == 1) { if (aa[i][j + 1] == 1 && aa[i][j + 2] == 0) b = 0; if (aa[i + 1][j] == 1 && (aa[i + 2][j] == 0 || aa[i - 1][j] == 0)) b = 0; } } } for (i = 1; i <= 7; i++) { for (j = 3; j <= 5; j++) { if (aa[i][j] == 1) { if (aa[i][j + 1] == 1 && (aa[i][j + 2] == 0 || aa[i][j - 1] == 0)) b = 0; if (aa[i + 1][j] == 1 && (aa[i + 2][j] == 0 || aa[i - 1][j] == 0)) b = 0; } } } a--; if (b == 0) printf("no\n"); else printf("yes\n"); } }
...全文
295 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2021-04-01
  • 打赏
  • 举报
回复
https://bbs.csdn.net/topics/380157851
#include <stdio.h>
int main() {
    int y,x,n,flag;
    static char data[9][9];
    scanf("%d\n", &n);
    while (n > 0) {
        scanf("%s%s"  ,data[1]+3,data[2]+3          );
        scanf("%s%s%s",data[3]+1,data[4]+1,data[5]+1);
        scanf("%s%s"  ,data[6]+3,data[7]+3          );
        flag=0;
        for(y=1; y<8; y++) {
            for(x=1; x<8; x++) {
                if(data[y  ][x  ]!='1') continue; //当前位置没棋子则跳过
                if(data[y-1][x  ]=='1'&&data[y+1][x  ]=='0'    //垂直方向:110
                 ||data[y-1][x  ]=='0'&&data[y+1][x  ]=='1'    //垂直方向:011
                 ||data[y  ][x-1]=='1'&&data[y  ][x+1]=='0'    //水平方向:110
                 ||data[y  ][x-1]=='0'&&data[y  ][x+1]=='1') { //水平方向:011
                    flag=1; //出现以上4种情况表示有解
                    break;
                }
            }
            if(flag==1) break;
        }
        n--;
        if (flag == 1) printf("no\n");
        else           printf("yes\n");
    }
    return 0;
}

姝歌 2021-03-31
  • 打赏
  • 举报
回复
引用 3 楼 coo135的回复:
你看看改成这样行不行~~

#include <stdio.h>
int main() {
	int i,j,n,flag;
	char data[9][9]= {'\0'};
	scanf("%d\n", &n);
	while (n > 0) {
		scanf("%s%s",data[1]+3,data[2]+3);
		scanf("%s%s%s",data[3]+1,data[4]+1,data[5]+1);
		scanf("%s%s",data[6]+3,data[7]+3);
		flag=0;
		for(i=1; i<8; i++) {
			for(j=1; j<8; j++) {
				if(data[i][j]!='1') continue; //当前位置没棋子则跳过 
				if(data[i-1][j]=='1'&&data[i+1][j]=='0' //垂直方向:110 
				        ||data[i-1][j]=='0'&&data[i+1][j]=='1' //垂直方向:011
				        ||data[i][j-1]=='1'&&data[i][j+1]=='0' //水平方向:110
				        ||data[i][j-1]=='0'&&data[i][j+1]=='1') { //水平方向:011
					flag=1; //出现以上4种情况表示有解 
					break;
				}
			}
			if(flag==1) break;
		}
		n--;
		if (flag == 1) printf("no\n");
		else printf("yes\n");
	}
	return 0;
}
谢谢大神
coo135 2021-03-31
  • 打赏
  • 举报
回复
你看看改成这样行不行~~

#include <stdio.h>
int main() {
	int i,j,n,flag;
	char data[9][9]= {'\0'};
	scanf("%d\n", &n);
	while (n > 0) {
		scanf("%s%s",data[1]+3,data[2]+3);
		scanf("%s%s%s",data[3]+1,data[4]+1,data[5]+1);
		scanf("%s%s",data[6]+3,data[7]+3);
		flag=0;
		for(i=1; i<8; i++) {
			for(j=1; j<8; j++) {
				if(data[i][j]!='1') continue; //当前位置没棋子则跳过 
				if(data[i-1][j]=='1'&&data[i+1][j]=='0' //垂直方向:110 
				        ||data[i-1][j]=='0'&&data[i+1][j]=='1' //垂直方向:011
				        ||data[i][j-1]=='1'&&data[i][j+1]=='0' //水平方向:110
				        ||data[i][j-1]=='0'&&data[i][j+1]=='1') { //水平方向:011
					flag=1; //出现以上4种情况表示有解 
					break;
				}
			}
			if(flag==1) break;
		}
		n--;
		if (flag == 1) printf("no\n");
		else printf("yes\n");
	}
	return 0;
}
姝歌 2021-03-31
  • 打赏
  • 举报
回复
引用 1 楼 赵4老师的回复:
不就是对每个空位置判断其上下左右方向都不存在连续两个棋子吗?
主要是循环的问题,因为上面两排和下面两排不是是从头开始的
赵4老师 2021-03-31
  • 打赏
  • 举报
回复
不就是对每个空位置判断其上下左右方向都不存在连续两个棋子吗?

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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