2019/3/6pat爱之再体验-英文审题到底把我给坑了

今天写的这个英文题其实就很简单,注意下标怎么求就行。但是在编程的过程中出现了一些语法错误。首先比如说,分号没加,分号没有打好(中文)这种尴尬的错误。如果有个正常的IDE的话会好一点。

然后scanf输入的用法自己还是没有弄得很清楚。

malloc今天被坑了一下。malloc的默认返回时void*,这样的话编译器其实是会根据情况帮我们选择返回的指针类型,但是今天做一个强制的int*的类型转换的时候报错了,这里留个坑,当时的报错信息是warning: implicitly declaring library function 'malloc' with type 'void *(un.....。

然后重点花时间有两个错误,一个是非常幼稚的if(A=B)错误,在一个if语句里用了一个=符号,导致输出的结果一直是自己在赋值。

然后另外自己一直卡的地方是,没有审清楚题意。题目要求的是,输出具体的开始和结束的数字,我以为是输出小标。以后出现问题,怀疑算法之前,还是要检查下语法错误以及与题目的契合度。

 

最后,自己的算法漏掉了一种情况。就是有零存在且其他数字为负数的时候,这个时候不仅要输出0,还要输出0的数字。如何解决这个问题呢,只要将开始的子列和的数字定义为负数就行,也就是把输出0的情况当成一种情况,与全部输入都是负数的情况区分开来。这个想法应该是和网上的许多代码不一样的。代码贴一下:

#include"stdio.h"

void MaxSubSequence(int A[], int K)
{
	int number = 0;
	int maxsequence = -1;
	int maxleft = 0;
	int maxright = 0;
	int sequenceleft = 0;
	int i;
	for (i = 0; i < K; i++)
	{
		number = number + A[i];
		if (number > maxsequence)
		{
			maxsequence = number;
			maxright = i;
			maxleft = sequenceleft;
		}
		if (number < 0)
		{
			number = 0;
			sequenceleft = i + 1;
		}
	}
	if (maxsequence == -1)
	{
	  	
		  printf("%d %d %d", 0, A[0], A[K - 1]);
	}

	else
	{
		printf("%d %d %d", maxsequence, A[maxleft], A[maxright]);
	}
}
int main()
{
	int K;
	int i;
	scanf("%d", &K);
	int *A = (int*)malloc(sizeof(int)*K);
	for (i = 0; i < K; i++)
	{
		scanf("%d", &A[i]);
	}
	MaxSubSequence(A, K);
	return 0;
}

这次编程经历体现了编程要细心要审题,要考虑到多样的情况。也就是说测试样例是必须的。

你可能感兴趣的:(理论知识,编程记录)