c语言博客作业04 数组
0.展示PTA总分(0----2)
一维数组
二维数组
字符数组
1.本章学习总结(2分)
1.1 学习内容总结
学习了数组中数据的存储 和输出
1.2 本章学习体会
数组要注意不能越界 使用数组解题方便很多
2.PTA实验作业(7分)
2.1 题目名1
7-11 求整数序列中出现次数最多的数 (15 分)
2.1.1 伪代码
由于该题测试数据有负数 所以不能利用数组下标 定义了两个数组 a和b,通过嵌套循环
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
b[i]++;
}
}
来确定后面的数组单位中是否有重复的数
若有 则b数组+1;
最后通过max下标定义法找出重复次数最多的数
int max;
max=0;
for(i=1;i<n;i++)
{
if(b[max]<b[i])
max=i;
}
2.1.2 代码截图
2.1.3 造测试数据
2.1.4 PTA提交列表及说明
部分正确:没有考虑到数据中有负数的情况
用下标法 来寻找最大值
2.2 题目名2
7-2 杨辉三角 (10 分)
2.2.1 数据处理
观察该杨辉三角 发现周围都是1 于是先定义一个二维数组 把所有数赋值成1
int a[10][10];
int i,j;
int n;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
a[i][j]=1;
}
}
被包围在其中的元素 都等于上面两个元素的和
for(i=2;i<10;i++)
{
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
2.2.2 代码截图
2.2.3 造测试数据
2.2.4 PTA提交列表及说明
一次性正确
2.3 7-6 阅览室 (20 分)
2.3.1 数据处理
题目较繁琐 可分为两段 一段是管理员输入0时即结束的循环 另一段判断平均阅读时间和借阅次数
并封装一个函数
int a[2000][3];
int num;
char op;
int n1,n2;
int N;
int k;
int i;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
k=0;
while(1)
{
scanf("%d %c%d:%d",&num,&op,&n1,&n2);
if(num==0)
break;
else
{
a[k][0]=num;
a[k][1]=op;
a[k][2]=n1*60+n2;
}
k++;
}
这是第一段 当管理员输入数据时 先判断number是否为0 若不是 则将数据存放于一个三列的二维数组中 k++
k为函数里的循环次数上限
void cf(int a[][3],int k)
{
int cnt=0;
double time=0;
for(int i=0;i<k;i++)
{
if(a[i][1]=='S')
{
for(int j=i+1;j<k;j++)
{
if(a[j][1]=='S'&&a[j][0]==a[i][0])
{
break;
}
else if(a[j][1]=='E'&&a[j][0]==a[i][0])
{
cnt++;
time+=a[j][2]-a[i][2];
break;
}
}
}
}
if(cnt!=0)
printf("%d %.0f\n",cnt,time/cnt);
else
printf("0 0\n");
当循环找到s时 继续循环 若又找到s 并且书号一样 则break 可去除重复数据
当碰到E时 计算相隔的时间即可
}
2.3.2 代码截图
2.3.3 造测试数据
2.3.4 PTA提交列表及说明
多种错误:函数里查找是否有无效数据时写成j=i而不是j=i+1
使得总会找到一个相等的S