heathera @ 2024-09-15 23:41:47
这段代码我自己咋试咋对,但是测试点只有6和7过了,为啥啊??
#include<stdio.h>
#include<string.h>
int main()
{
//输入字符串,并把字符串拼接起来
char str[200],test[40000];
scanf("%s",str);
int n=strlen(str);
strcat(test,str);//把第一行字符数组str拼接到test中,单独拼第一行的目的是得到字符串的长度(即n的值)
for(int i=2;i<=n;i++)//第一行已经拼了,从第二行开始
{
scanf("%s",str);
strcat(test,str);
}
printf("%d ",n);
//比较字符数组中相邻的字符是否相同,同时注意从0开始
int time=0;
for(int i=0;i<n*n;i++)
{
int count=0;
if(time==0&&i==0)//检查第一个数是不是1,如果是1要跳过1的部分,但是能且仅能跳过开头的一次
{
if(test[i]!='0')
printf("0 ");
{
for(;test[i]!='0';)
{
time++;
i++;
}
}
}
while(test[i]==test[i+1])
{
count++;
i++;
}
if(count!=0)//数表全1时需要特判
printf("%d ",count+1);//有m对数字比较相同,则共m+1个相同数字
else
printf("%d ",count);
}
return 0;
}
/*
先把所有数码暂存在字符数组str里,再使用strcat冲掉换行符并逐行拼接字符串进text中;
输出边长n;
搞一个循环,循环条件就是i<n*n;
然后逐个比较当前数组元素与下一元素,如果相同则count++;如果不同则count+1后跳出循环(例如0001就是count++两次再+1就跳出循环);然后输出count
(注意每次循环要把count归零)
*/
by liyoulin @ 2024-09-16 00:21:12
给你一组测试数据:
输入:
1 1
1 0
正确输出:
2 0 3 1
你的输出:
2 0 0
by liyoulin @ 2024-09-16 00:21:43
@heathera
by liyoulin @ 2024-09-16 00:29:53
#include<stdio.h>
#include<string.h>
int main()
{
char str[200],test[40000];
scanf("%s",str);
int n=strlen(str);
strcat(test,str);
for(int i=2;i<=n;i++)
{
scanf("%s",str);
strcat(test,str);
}
printf("%d ",n);
int now=0;
for(int i=0;i<n*n;){
int count=0;
while(test[i]-'0'==now){
count++;
i++;
}
now=(now+1)%2;
printf("%d ",count);
}
return 0;
}
改后的代码
自行理解