2019第三周作业

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!\n");
        exit(0);
    }
        fscanf(fp,"%d",&n);
        printf("%d\n",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("\n%d\n",max);
    fprintf(fp,"\n%d\n",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!\n");
                          exit(0);
                          
           }
               return 0;
}

2)流程图
1580393-20190315204204608-2108119841.png
3)遇到的问题
1580393-20190315204612547-364947408.png
在输出子数组是永远全存在

4)解决:仔细浏览之后发现在控制子数组的if语句中没有大括号,再加上之后正确。
1580393-20190315205611863-30032200.png

1580393-20190315205917917-1966180179.png

1580393-20190315205942664-1243711548.png

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\n");
         else
        printf("YES\n");
}
            return 0;
}

2)流程图
1580393-20190315214348846-627351839.png

3)遇到的问题
1580393-20190315214610366-805334441.png
刚开始一直用的是矩阵下三角的数来判断是否为下三角矩阵然后答案一直错误。
4)解决 后来发现用等于零来判断不行,因为这样只要下三角最后一个数为零就会满足导致答案错误,所以我用不等于零来判断
1580393-20190315215021418-2074857445.png

5)评价:对这次作业自我感觉良好,熟透了,用时一个小时左右。

转载于:https://www.cnblogs.com/djhxxx/p/10539763.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值