如题,真的是搞不明白,明明答案感觉没问题
#include <stdio.h>
int main(){
int n;
int oneNumber=0;
int zeroNumber=0;
char c[200];
for(int i=0;i<200;i++){
scanf("%c",&c[i]);
if(c[i]=='\n'||c[i]=='\0'){
n=i;
break;
}
} //读取第一行
char a[n-1][n];
for(int x=0;x<n-1;x++){ //上面已经读取一行了,则n-1
for(int y=0;y<=n;y++){ //需要y=n读取后面的'\n'防止变量混乱
scanf("%c",&a[x][y]);
}
} //剩下的行
printf("%d",n); //输出行数
for(int i=0;i<n;i++){
if(c[i]=='0'){
zeroNumber++;
if(oneNumber!=0){//证明是一后首个零
printf(" %d",oneNumber);
oneNumber=0; //清空'1'的个数
} //第一个零则输出上个一的个数
} else { //非'0'则'1'
if(zeroNumber==0 && oneNumber==0){
printf(" 0");
} //第一个一没有上个零证明是第一个数,需要输出0
oneNumber++;
if(zeroNumber!=0){//证明是零后首个一
printf(" %d",zeroNumber);
zeroNumber=0; //清空'0'的个数
}
}
} //仅为第一行,需要更换变量重复代码
for(int x=0;x<n-1;x++){
for(int y=0;y<n;y++){
if(a[x][y]=='0'){
zeroNumber++;
if(oneNumber!=0){
printf(" %d",oneNumber);
oneNumber=0;
}
} else {
oneNumber++;
if(zeroNumber!=0){
printf(" %d",zeroNumber);
zeroNumber=0;
}
} //重复的代码
if(x==n-2 && y==n-1){ //最后一位数直接打印
if(zeroNumber==0){
printf(" %d",oneNumber);
} else {
printf(" %d",zeroNumber);
}
}
}
}
return 0;
}