#一,本周完成的做业(第一题) ##基础做业 ####给定一个整数数组(包含正负数),找到一个具备最大和的子数组,返回其最大的子数组的和。 ####输入: ####请创建以本身英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。 ####输出: ####在不删除原有文件内容的状况下,将最大子数组以及子数组的和写入文件。 ###1)实验代码算法
#include<stdio.h> #include<string.h> #include<stdlib.h> int main (void) { FILE *fp; char a; /*吸取数组先后的括号和数组中的逗号*/ int n=8,nums[8],b,j,i,c; if((fp=fopen("E:\\PTA\\chenxilin.txt","r+"))==NULL){ printf("File open error!\n"); exit(0); } fscanf(fp,"%c",&a); /*吸取数组前的括号*/ for(i=0;i<8;i++){ fscanf(fp,"%d%c",&nums[i],&a); /*此时的字符a用来吸取逗号*/ printf("%d ",nums[i]); } fscanf(fp,"%c",&a); /*吸取数组后的的括号*/ int max = 0; int sum = 0; /*最大的子数组的和*/ for(i=0;i<n;i++){ sum = 0; for(j=i;j<n;j++){ sum += nums[j]; if(sum > max ) max = sum; } } /*找出最大子数组*/ for(i=0;i<n;i++){ sum=0; for(j=i;j<n;j++){ sum+=nums[j]; if(sum==max){ b=i; c=j; break; } } } printf("\n"); fprintf(fp,"\n最大子数组是["); /*输出最大子数组*/ for(i=b;i<=c-1;i++){ fprintf(fp,"%d,",nums[i]); printf("%d ",nums[i]); } fprintf(fp,"%d",nums[c]); printf("%d ",nums[c]); fprintf(fp,"]"); /*输出最大子数组的和*/ fprintf(fp,"\n最大子数组的和是%d",max); printf("\n%d",max); if(fclose(fp)){ printf("Can not close the file!\n"); exit(0); } return 0; }
###2)设计思路 数组
###3)本题调式过遇到的问题及其解决方法 ####问题一,数组中有逗号定义一个数组数组会把逗号吸取进去,致使数组内容出错! ###解决方法,定义一个字符变量,用来吸取括号和逗号. ###4)运行结果 学习
##第二题 ###判断上三角矩阵 (15 分) ####上三角矩阵指主对角线如下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。本题要求编写程序,判断一个给定的方阵是否上三角矩阵。设计
###输入格式: ###输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每一个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。3d
###输出格式: ###每一个矩阵的判断结果占一行。若是输入的矩阵是上三角矩阵,输出“YES”,不然输出“NO”。code
###输入样例:blog
2 3 1 2 3 0 4 5 0 0 6 2 1 0 -8 2
###输出样例:string
YES NO
###1)实验代码it
#include <stdio.h> int main(void) { int T,n,i,h,l,p; int a[100][100]; scanf("%d",&T); for(i=1;i<=T;i++) { scanf("%d",&n); for(h=0;h<n;h++) { for(l=0;l<n;l++) scanf("%d",&a[h][l]); } p=1; for(h=0;h<n;h++) { for(l=0;l<h;l++) { if(a[h][l]!=0) p=0; } } if(p==1) printf("YES\n"); if(p==0) printf("NO\n"); } return 0; }
###2)设计思路 ###3)本题遇到的问题及其解决方法 ####问题一,怎么遍历下三角 ####解决方法,下三角的行数小于列数 ###4)运行结果
io
#二,学习进度条 | 周/日期| 这周所花的时间|代码行|学到的知识点简介|目前比较困惑的问题| |:------:|:------:| :------:|:------:|:------:| |3/9-3/15|240min|100|文件创建及其文件的利用|| |3/15-3/22|240min|200|二位数组和暴力解法|最大子数组最优的解法是什么,如何下降时间复杂度| #三,学习感悟 ##我作第一个题的代码看来很长,其实我在尽可能知足老师的输入,输出的格式!使其看起来更真实一点。这是一道算法题。而解算法题有两种方法,一种是暴力解法(我此次用的就是暴力解法),另外一种是用解算法题的公式去解;用暴力解题思惟很简单,但时间复杂度很大!