2019年春季学期第三周作业
基础作业
本周没上课,但是请大家不要忘记学习。
本周请大家完成上周挑战作业的第一部分:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。
例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2]
输入:
请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
输出
在不删除原有文件内容的情况下,将最大子数组以及子数组的和写入文件。
1)实验代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE * fp;
int i,n,a[100],k,x,y,sum,max=0;
if((fp=fopen("D:\Duanjianhong.txt","a+"))==NULL){
printf("File open error!
");
exit(0);
}
fscanf(fp,"%d",&n);
printf("%d
",n);
for(i=0;i<n;i++) {
fscanf(fp,"%d",&a[i]);
printf("%d ",a[i]);
}
for(i=0;i<n;i++){
sum=0;
for(k=i;k<n;k++){
sum=sum+a[k];
if(sum>max)
max=sum;
}
}
for(i=0;i<n;i++){
sum=0;
for(k=i;k<n;k++){
sum=sum+a[k];
if(sum==max){
x=i;
y=k;
}
}
}
printf("
%d
",max);
fprintf(fp,"
%d
",max);
for(i=x;i<=y;i++){
fprintf(fp,"%d ",a[i]);
printf("%d ",a[i]);
}
if(fclose(fp)){
printf("Can not close the file!
");
exit(0);
}
return 0;
}
2)流程图
3)遇到的问题
在输出子数组是永远全存在
4)解决:仔细浏览之后发现在控制子数组的if语句中没有大括号,再加上之后正确。
5)对于自己的这次作业不是特别满意,用时长,参考了别人的。
预习作业
预习“7.2 二维数组”,并完成PTA上的第三周作业:判断上三角矩阵
1)实验代码
#include<stdio.h>
int main()
{
int T,n,i,j,k,count;
scanf("%d",&T);
for(i=0;i<T;i++){
count=0;
scanf("%d",&n);
int a[n][n];
for(j=0;j<n;j++)
for(k=0;k<n;k++)
scanf("%d",&a[j][k]);
for(j=0;j<n;j++)
for(k=0;k<j;k++)
if(a[j][k]!=0)
count=1;
if(count==1)
printf("NO
");
else
printf("YES
");
}
return 0;
}
2)流程图
3)遇到的问题
刚开始一直用的是矩阵下三角的数来判断是否为下三角矩阵然后答案一直错误。
4)解决 后来发现用等于零来判断不行,因为这样只要下三角最后一个数为零就会满足导致答案错误,所以我用不等于零来判断
5)评价:对这次作业自我感觉良好,熟透了,用时一个小时左右。