0.展示PTA总分
一维数组
二维数组
1.本章学习总结
1.1 学习内容总结
1.数组中如何查找数据:可以用循环语句将数组中所有的数检查一遍,若找到便退出循环语句;还有二分法:定义left(数据集的开头),right(数据集结尾)两个变量,然后在这组数据中找到mid=(left+right)/2,然后将待查找元素与mid所指元素进行比较,如果相等将索引返回,如果查找元素大于mid所指元素,则将left向右移动即left=mid+1;如果查找元素小于mid所指元素,则将left向左移动即right=mid-1。重复以上过程直到left>right(因为此时表明并不存在待查找元素)
2.数组中如何插入数据:把数据放在需要的位置之后,该位置原本的数往下移一位
3.数组中如何删除数据:将该位数用下一位的数来代替,然后接下来的数也依次往前移动一位,也可以重新定义一个数组,重新存放除要删除的数据之外的所有数据。
4.数组中目前学到排序方法:冒泡排序法:用循环语句来对比每两个相邻的数据,大的数下沉,小的数上浮。选择排序法:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
5:哈希数组:不懂
1.2 本章学习体会
代码量:421
2.PTA实验作业
2.1 题目名:17-9 调查电视节目受欢迎程度
2.1.1 伪代码
输入数据 for(i = 0; i < n; i++) 如果 a[i]等于1~8中的某个数 数组b 对应的位置加一 end for 输出结果
2.1.2 代码截图
2.1.3 造测试数据
2.1.4 PTA提交列表及说明
提交列表说明:
答案错误:输出的格式错误
多种错误:输出的格式错误,并且循环体的语句有问题,后面干脆改成if语句的堆砌
部分正确:某一行写成for (i = 0; i < n; i++);
删去分号答案正确
2.2 题目名2:7-4 数组循环左移
2.2.1 数据处理
输入数据 for(k = 1; k 小于等于 m; k++) 储存a[0]的值 for(i = 1; i小于等于n - 1; i++) 令数组移动,即a[i - 1] = a[i] end for 令a[n - 1]读取a[0]的值 end for 输出结果
2.2.2 代码截图
2.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
1 2 3 4 5 6 7 8 | 4 5 6 7 8 1 2 3 | 正常数据 |
5 4 2 6 8 7 3 1 9 | 8 7 3 1 9 5 4 2 6 | 正常数据 |
2.2.4 PTA提交列表及说明
提交列表说明:
答案错误:循环的条件没理清楚,导致答案错误,通过重新计算解决
编译错误: 语法有问题 好像少了个括号还是分号
格式错误:输出格式没注意题目要求,修改后答案正确
2.3 题目名3:7-7 冒泡法排序
2.3.1 数据处理
输入数据 while循环k次 for循环n次 如果a[i]大于a[i + 1] 交换两个数的值 end for end while 输出结果
2.3.2 代码截图
2.3.3 造测试数据
2.3.4 PTA提交列表及说明
提交列表说明:
答案错误:没弄明白题目要干什么,然后懂了
3.阅读代码
#include<iostream> #include<vector> #include<string.h> #include<stdio.h> #include<algorithm> #include<cmath> using namespace std; enum { SIZ = 40, }; char rep[10] = {0, 1, 5, 3, 4, 2, 9, 7, 8, 6}; char dig[SIZ]; int len; int fun(){ int i, t = dig[len], hi; if(rep[t] > t){ dig[len] = rep[t]; return 1; } hi = t; for(i=len-1; i>=0; i--){ t = dig[i]; if(t < hi || rep[t] > t){ int k=i; for(int j=i+1;j<=len;j++){ t = dig[j]; if(t > dig[i] && t <= hi){ hi = t; k = j; } if(rep[t] > dig[i] && rep[t] <= hi){ hi = rep[t]; dig[j] = rep[t]; k = j; } } t = dig[i]; if(rep[t] > t && (hi < t || hi > rep[t])){ dig[i] = rep[t]; } else { swap(dig[i], dig[k]); } for(k= i+1; k<=len; k++){ dig[k] = min(dig[k], rep[dig[k]]); } sort(dig+i+1, dig+len+1); return 1; } hi = max(hi, t); } return 0; } void trim(){ len = 0; for(int i=0; dig[i]; i++){ if(dig[i]!='.'){ dig[len++] = dig[i] - '0'; } } dig[len--] = 0; } void output(int s){ if(s <=0){ printf("The price cannot be raised.\n"); return ; } for(s=0; s<len; s++){ printf("%d", dig[s]); } printf(".%d\n", dig[len]); } int main(){ scanf("%s", dig); while(dig[0]!='.'){ trim(); output(fun()); scanf("%s", dig); } return 0; }
理解:代码的功能是给定当前的油价,计算下一个最高价格,它可以使用相同的数字和相同的格式规则显示。仅包含小数点的输入行终止输入。如果价格不能提高,输出"The price cannot be raised."这个代码使用了函数的嵌套,而主函数只有短短的几行,作者熟悉运用各种函数接口,各种函数让人眼花缭乱,不由得让我想起了上次的大作业就可以借鉴这种模式。