乔奈 @ 2020-03-31 15:07:50
#include<stdio.h>
#include<string.h>
int main()
{
char a[40000], b[200];
unsigned int n, i, j=1, k=0;
scanf_s("%s", b);
n = strlen(b);
strcat(a, b);
for (i = 2; i <= n; i++)
{
scanf_s("%s", b);
strcat(a, b);
}
printf("%d", n);
for (i = 800; i<strlen(a); i++)//这里我改了很多次i的值
{
if (a[0] == 1)printf("0");
if (a[i] == a[i - 1]) { j++; }
else { printf("%d ", j); j = 1; }
}
printf("%d ",j);
}
输入:
11111
00100
11111
00100
11111
差不多每次都输出:
5 400004 1 1 1 1 1 1 1 5 2 1 2 5 2 1 2 5
(答案为0 5 2 1 2 5 2 1 2 5)
有dl能教教我为什么会输出400004和一堆1吗?
感觉智商不够了
by Toclhu @ 2020-03-31 15:14:12
用C++吧
by HearTheWindSing @ 2020-03-31 15:18:45
@乔奈 为啥要设置i呢?我的代码:
#include <bits/stdc++.h>
using namespace std;
int a[200+10];
int main(){
string s;
int m=0,n,tot=0;
bool t=0;
while (cin >> s){
int len=s.size();
n=len;
for (int i=0;i<len;i++){
if (t^(s[i]-'0')){
t=!t;
a[tot++]=m;
m=0;
i--;
}
else m++;
}
}
a[tot++]=m;
printf("%d",n);
for (int i=0;i<tot;i++){
printf(" %d",a[i]);
}
printf("\n");
return 0;
}
by 乔奈 @ 2020-03-31 16:22:27
@Oahgnehz 好像在另一个帖子见过你
by ihesro @ 2020-06-26 23:23:06
@乔奈
我的题解,应该比较好懂。
#include <bits/stdc++.h>
using namespace std;
int main(){
string s[200];cin>>s[0];int n=s[0].size();char cur='0';int sum=0;for(int i=1;i<n;i++)cin>>s[i];
cout<<n<<' ';
for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(s[i][j]==cur){
sum++;
}else{
cout<<sum<<' ';
sum=1;
cur=s[i][j];
}
cout<<sum;
return 0;
}