判断上三角矩阵
1.实验代码
复制代码
1 #include2 #include 3 int main(int argc, char *argv[]) 4 { 5 6 int n; 7 int T; 8 int a[10][10]; 9 scanf("%d", &T);10 int *b= (int*)malloc(sizeof(int)*T);11 int i,c,j;12 13 for (i = 0; i < T; i++)14 {15 scanf("%d", &n);16 17 for (j = 0; j < n; j++)18 for (c = 0; c < n; c++)19 {20 scanf("%d", &a[j][c]);21 }22 23 for (j = 1; j < n; j++)24 {25 for (c=0; c< n;c++)26 {27 if (c < j&&a[j][c] == 0)28 b[i] = 0;29 if(c
复制代码
运行截图设计思路:
1.先用T来储存有几个三角矩阵.
2.输出矩阵,并且运用双循环和二维数组来判断小于i,j的数组元素是否为0.
3.最后判断该是否为三角矩阵.
本题调试过程及解决方案:没得问题.
流程图:
求最大子数组之和
1.实验代码
复制代码
#include#include int main(int argc, char *argv[]){ int i, n, max; FILE *fp; if ((fp = fopen("D:\\编程\\C\\代码\\PYozo", "a+")) == NULL) { exit(0); } fscanf(fp, "%d", &n); //数组中有几个元素 int *p = (int*)malloc(sizeof(int)*n); //用动态分配储存数组里的元素 char ch; for (i = 0; i < n; i++) { fscanf(fp, "%d%c", &p[i], &ch); } int j=0; int *sum = (int*)malloc(sizeof(int)*n); int *arr = (int*)malloc(sizeof(int)*n); sum[0] = p[0]; max = sum[0]; arr[0]=sum[0]; for (i = 0; i < n; i++) { if (sum[i] >= 0&&i!=0) //如果sum大于0则继续加,因为sum大于0有可能还会继续增加. { sum[i] = sum[i - 1] + p[i]; arr[j] = p[i]; j++; if (sum[i] > max) max = sum[i]; } if (sum[i] < 0) //如果sum小于0就不用管,因为这肯定不是最大的数. { j = 0; sum[i] = p[i]; if (sum[i] > max) { max = sum[i]; arr[j]=sum[i]; } sum[i + 1] = p[i + 1]; sum[i] = 0; } } fprintf(fp,"\n"); if(max>0) { i=0; sum[0]=0; while(1) { sum[0]+=arr[i]; i++; if(sum[0]==max) break; } } for (j = 0; j
复制代码
运行截图设计思路:
1.运用malloc动态分配来创造一个数组p.2.在从下标0开始加,若是全为负数先将结果储存到数组里面在则会判断谁为最大负数,若是和为正数,那么它有可能增加也可能变少,通过判断将其保存在一个变量中,若和为负数,则将当前下标数组sum清0直接进行下次的递增.
本题调试过程及解决方案:
1.一开始想到的解题方式是想用枚举法的,但是听了dalao给我说了这道题涉及的算法,才写出了简便的代码。2.并且我也没有把和若为负数的情况考虑周到,使得显示出来的答案一直为16或者17,随即便找到了未将sum[i]重新赋值为0导致sum并没有从一个新的下标开始加.3.同时我也没考虑到若数组全为负数怎么办,到后面尝试了一下发现只要加两条代码sum[i+1]=p[i+1];sum[i]=0;即可。二:学习进度:
学习感悟:
发现知道的越多不懂的也就越多,所以要更加努力的学习