求助,为什么代码会超时啊,有什么好的优化方法吗
查看原帖
求助,为什么代码会超时啊,有什么好的优化方法吗
643246
2091088157xd楼主2022/2/13 20:57

这是我写的代码,结果都正确,但是都超时了,有什么好办法优化吗

#include<stdio.h>
int a[10000] = { 0 }, b[10000] = { 0 };
int main ()
{
	char x='0',X = '0';
	int k = 0, n, i, j = 1, z = 1, mark, sum = 0;
	for (; 1;)//无限循环,后面有停止条件
	{
		scanf("%c", &x);
		if (x != '\n')
		{	sum++;//sum统计输入的数字字符数
			x == X ? mark = 0 : mark = 1;
			X = x;
			//int(x - '0') == X ? mark = 0 : mark = 1;//如果发生了变化,则开关就会打开,对应的计数数组就会移动至下一位
			//X = int(x - '0');//把字符转化为数字
			if (X=='1')//开始判断数字,并分配
			{
				a[j]++;
				if (mark==1)//如果开关打开,则对另一个数组进行移位到下一个空间
				{
					z++;
				}
			}
			else 
			{
				b[z]++;
				if (mark==1)//如果开关打开,则对另一个数组进行移位到下一个空间
				{
					j++;
				}
			}
		} else 
		{
			if (k==0)//通过第一次出现回车来判断n的值,并进行单次记录
			{
				k = sum;
			}
			if (sum == k * k)//for循环的判断语句,当sum达到n的二次方时停止
			{
				break;
			}
		}
	}
	printf("%d ",k);//输出n
	for (i = 1; i < j + z; i++)
	{
		if (i % 2 != 0)
		{
			printf("%d ", b[(i + 1) / 2]);//输出0的个数,因为0的个数一定排在i的奇数位,故用除二的方法来得出b得的数组位数
		}
		else
		{
			printf("%d ", a[i/2]);
		}
	}
	return 0;
}
2022/2/13 20:57
加载中...