Lemonrange @ 2022-09-24 00:26:37
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;
int main()
{
char Arr[41000];
int i = -1, size;
int Count = 0;
//先吃掉第一行内容
while (Arr[i]!='\n')
{
i++;
scanf("%c", &Arr[i]);
}
Arr[i] = '\0';
//计算有多少行和列
size = strlen(Arr);
//对剩下的元素吃入数组
for (i = size; i < size*size; i++)
{
scanf("%c", &Arr[i]);
if (Arr[i] == '\n')
{
i -= 1;
continue;
}
}
//输出第一个码
printf("%d ", size);
//遍历数组 找相同计数+1 不相同+1后printf 之后归零继续找
for (i = 0; i < size*size; i++)
{
//找到最后两个时
if (i + 1 == size * size-1)
{
//最后两个相同
if (Arr[i + 1] == Arr[i])
{
Count += 2;
printf("%d", Count);
break;
}
//最后两个不相同
if (Arr[i + 1] != Arr[i])
{
Count++;
printf("%d ",Count);
printf("1");
break;
}
}
//如果前一个和后一个相等
if (Arr[i + 1] == Arr[i])
Count++;
//如果前一个和后一个不相等
if (Arr[i + 1] != Arr[i])
{
Count++;
printf("%d ", Count);
Count = 0;
}
}
return 0;
}
by Lemonrange @ 2022-09-24 10:34:47
睡一觉起来,自我解决了
我怀疑是
//先吃掉第一行内容
while (Arr[i]!='\n')
{
i++;
scanf("%c", &Arr[i]);
}
Arr[i] = '\0';
//计算有多少行和列
size = strlen(Arr);
//对剩下的元素吃入数组
for (i = size; i < size*size; i++)
{
scanf("%c", &Arr[i]);
if (Arr[i] == '\n')
{
i -= 1;
continue;
}
}
这一段码的问题,第一个while读入和后面的for遍历输入占时很高,导致tle了
或者说不一定是第一个while在某些条件下会无限循环直接Tle
后面改成的是这样的代码
//吃掉第一行的字符串
scanf("%s", &Arr);
size = strlen(Arr);
//对剩下的几行字符串吃掉 随后利用strcat相接入Arr数组里
for (i = 0; i < size-1; i++)
{
char str[201];
scanf("%s", &str);
strcat(Arr,str);
}
这样子就不会Tle了 但是会WA
其中原因就是如果第一行没0 起始是1 那么就要先输入有0个0 再输出1的个数
所以在下面那个for遍历数组找到有多少个0和1时 要特判起始为1的这个情况
很简单 在四个if前加一个特判if就可以了
if (i == 0 && Arr[i] == '1')
{
printf("0 ");
Count++;
continue;
}
这样就AC了
没想到睡一觉起来 精神好了 改一下就AC了(恼
没大佬来帮我(哭