• 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 a[8];
        int i,j,s,e,sum;
        if((fp=fopen("D:\yxh.txt","a+"))==NULL)
        {
            printf("File open error!
    ");
            exit (0);
        }
    	for(i=0;i<8;i++)
            fscanf(fp,"%d",&a[i]);
        int max=-1000; 
    	int c[8];   
        c[0]=a[0]; 
        for (i=1;i<8;i++)
    	{
    		if(c[i-1]>0)
    			c[i]=c[i-1]+a[i];	
    		else
    			c[i]=a[i];
    		if (c[i]>max)
    			max=c[i];
    	}
     	for(i=0;i<8;i++)
      {
        sum=0;
        for(j=i;j<8;j++)
        {
            sum+=a[j];
            if(sum==max)
            {
    		   s=i,e=j;
               break;
            }
        }
       } 
       for(i=s;i<=e;i++)
        fprintf(fp,"%d,",a[i]);
    	fprintf(fp,"
    %d",max);
    	   
        if(fclose(fp)) 
        {
            printf("Can not close the file!
    ");
            exit(0);
         } 
        return 0;
           
     }
    

    2).设计思路

    3).本题调试过程

    改了几次‘r+’和‘w+’发现都失败了,后来用的‘a+’。求最大子集合的和,用动态规划法来求解的利用了一个数组C来保存临时产生的值,只用了一层for循环。求子数组本想一起完成,求出开始的i和结束的i。```
    if(c[i-1]>0)
    c[i]=c[i-1]+a[i];
    else{
    c[i]=a[i];
    s=i;}
    if (c[i]>max){
    max=c[i];
    e=i;}

    但弄不好,最后又只能遍历数组。
    **4).实验结果截图**
    ![](https://img2018.cnblogs.com/blog/1581752/201903/1581752-20190316075420380-1960347789.jpg)
    
    **判断上三角矩阵 **
    上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
    本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
    **输入格式:**
    输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
    **输出格式:**
    每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
    **输入样例:**
    

    2
    3
    1 2 3
    0 4 5
    0 0 6
    2
    1 0
    -8 2

    **输出样例:**
    

    YES
    NO

    **1).实验代码**
    

    include<stdio.h>

    int main(void){
    int t,n,i,j;
    int a[10][10];
    scanf("%d",&t);
    while(t--){
    int b = 1;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    for(j=0;j<n;j++){
    scanf("%d", &a[i][j]);
    if(i>j&&a[i][j]!=0)
    b = 0;
    }
    if(b)
    printf("YES ");
    else
    printf("NO ");

    }
    
    
    return 0;
    

    }

    **2).设计思路**
    ![](https://img2018.cnblogs.com/blog/1581752/201903/1581752-20190316085017651-895661627.jpg)
    **3).本题调试过程**
    ![](https://img2018.cnblogs.com/blog/1581752/201903/1581752-20190316085101210-2136556341.png)
    开始在dev可以过,在pta就是过不了。改了好多次,最后才发现判断点b每次大循环开始要重新赋值b=1.
    **4).实验结果截图**
    ![](https://img2018.cnblogs.com/blog/1581752/201903/1581752-20190316085524932-208216199.png)
    ##二、学习进度条
    | 周/日期 |这周所花的时间|代码行| 学到的知识点简介|目前比较迷惑的问题|
    | - | - | - | - | - |
    | 3/9-3/15| 4小时|200| 从文件上读入数据|文件结构和文件类型指针|
    |3/16-3/22|5小时|300|预习二维数组|文件文本|
    ##三、学习感悟
    想不出的点,不要钻死胡同,可以尝试换种方法或问度娘,集思广益。
  • 相关阅读:
    ImageMagick出错/undefined in findresource
    只对目录更改权限的办法(xarg)
    关于linux下php环境
    php 上传大文件
    做下载系统时的一些HTML文件头
    POJ 1694 An Old Stone Game ★(排序+树+递归)
    POJ 1991 Turning in Homework ★(区间DP)
    POJ 2452 Sticks Problem ★ (单调栈+RMQ)
    HDU 2069 Coin Change (母函数)
    HDU 2069 Coin Change (母函数)
  • 原文地址:https://www.cnblogs.com/scafer/p/10540640.html
Copyright © 2020-2023  润新知