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."这个代码使用了函数的嵌套,而主函数只有短短的几行,作者熟悉运用各种函数接口,各种函数让人眼花缭乱,不由得让我想起了上次的大作业就可以借鉴这种模式。