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

3.阅读代码(-2--1分)

posted @ 2019-11-17 20:30  啊是大家肯定会  阅读(277)  评论(0编辑  收藏  举报