2019年春季学期第三周作业
第一题:
7-1 判断上三角矩阵
上三角矩阵指主对角线以下的元素都为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()
{
int n,m;
scanf("%d %d\n",&n,&m);
if(n<=m)
m=m-n;
int a[n],i=0;
for(i=0;i<n;i++)
{
int s=i+m;
if(s<n)
scanf("%d",&a[s]);
else if(s>=n)
scanf("%d",&a[s-n]);
}
for(i=0;i<n;i++)
{
if(i<(n-1))
printf("%d ",a[i]);
else
printf("%d",a[i]);
}
}
- 设计思路
3.本题调试过程碰到问题及解决办法
问题:各答案错误,在DEV—C上运行时发现无法输入第二个矩阵
解决方法:发现了在第一个FOR语句后的分号,删除后即正确
4.运行截图
第二题:
给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。
例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2]
输入:
请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
输出
在不删除原有文件内容的情况下,将最大子数组以及子数组的和写入文件。
1,实验代码
#include<iostream>
using namespace std;
int main()
{
int Array[100],i=1,dp[100][2],j,MaxSum;
int s0=-1,e0=-1,s1=0,e1=0;
cout<<"请输入一组数组:";
cin>>Array[0];
while(getchar()!='\n') //输入数组部分,空格表示输入结束
{
cin>>Array[i++];
}
int S[i],start[i],end[i],n,finalStart,finalEnd;
for(n=0;n<i;n++)
{
dp[0][0]=Array[n];
dp[0][1]=Array[n];
for(j=1;j<i;j++)
{
if(dp[j-1][0]<dp[j-1][1])
{
dp[j][0]=dp[j-1][1];
s0=s1,e0=e1;
}
else
{
dp[j][0]=dp[j-1][0];
}
if(Array[j]<(dp[j-1][1]+Array[(j+n)%i]))
{
dp[j][1]=dp[j-1][1]+Array[(j+n)%i];
e1=j+n;
}
else
{
dp[j][1]=Array[(j+n)%i];
s1=e1=j+n;
}
}
if(dp[j-1][0]>dp[j-1][1])
{
S[n]=dp[j-1][0];
start[n]=s0;
end[n]=e0;
}
else
{
S[n]=dp[j-1][1];
start[n]=s1;
end[n]=e1;
}
}
MaxSum=S[0];
finalStart=start[0];
finalEnd=end[0];
for(n=0;n<i;n++)
{
if(MaxSum<S[n])
{
MaxSum=S[n];
finalStart=start[n];
finalEnd=end[n];
}
}
cout<<"最大子数组为和:"<<MaxSum<<"\n最大子数组为:";
for(int q=finalStart;q<=finalEnd;q++)
{
cout<<Array[q%i]<<" ";
}
return 0;
}
2.设计思路
这题难度太大,问的同学。
3.运行编辑图
4.学习感悟
(1)这两周你学习了哪些内容?收获了什么?
这两周我主要学习了数组,二维数组方面的知识,在我看来在编程平日中,如果我们有一组相同数据类型的数据,例如有50个数字,这时候如果要用变量来存放它们的话,就要分别定义50个变量,并且要记下这50个变量的名字,这会相当麻烦,这时候就可以用一个数组变量来存放他们,大大方便了我们的操作;
(2)本周所学内容中你觉得哪些是难点?有哪些知识点还不明白?
在这两周的学习内容中我觉得数组的下标这一块是一个难点,我经常会从1开始计数导致数组下标超出,还是需要多多练习;
5.学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学习的知识点 | 目前比较迷惑的问题 |
---|---|---|---|---|
3/2-3/8 | 两天 | 30 | 文件的处理 | 文件指针的用法 |
3/9-3/15 | 三天 | 45 | 数组的使用 | 数组的下标 |