C语言博客作业04--数组
0.PTA总分展示
1.本章学习总结
1.1学习内容总结
数组中如何查找数据,有哪些做法
- 一般遍历法:
对于数组的查询,其实就是对数组中数据做一个遍历。最常用的方法就是通过循环对数组中的元素逐个取值,并与参考值(要查询的值)做比对,并处理结果。 - 二分查找法(数据按顺序排列):
while (low <= high)
{
mid = (high + low) / 2;
if (a[mid] == date)
{
index = mid
break;
}
if (a[mid] < date)
low = mid + 1;
else
high = mid - 1;
}
数组中如何插入数据,怎么做,可以写个伪代码或动态图展示方法
- 伪代码:
输入数据
for(遍历数组)
if(a[i]==date)
index=i找到插入位置
for(i=index;i<n;i++)将该位置以后的数据往后移一位
end for
输出更改后的数组
数组中如何删除数据,这个有多种做法,请一一展示。
- 数组左移法:
for (j=1; j <= k; j++)
{
scanf("%d", &x);
for (i = x-1; i < n-1 ; i++)
{
a[i] = a[i + 1];
}
}
- 再定义数组法:
int b[n-1]//n为原数组长度
for(i=0;i<n;i++)
{
if(i<index)
{
b[i]=a[i];
}
else
{
b[i]=a[i+1];
}
}
数组中目前学到排序方法,主要思路?
- 冒泡排序:
代码:
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j+1]) { // 相邻元素两两对比
var temp = arr[j+1]; // 元素交换
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
- 选择排序:
代码:
function selectionSort(arr) {
var len = arr.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) { // 寻找最小的数
minIndex = j; // 将最小数的索引保存
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
数组做枚举用法,有哪些案例?
C语言定义数组时使用枚举作为数组的下标
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
还有就是定义字符数组作为枚举变量。
哈希数组用法,目前学过哪些案例,举例展示。
用哈希数组的下标计数,用内容做数量的大小。
2.PTA实验作业
2.1 7.5有重复的数据I
2.1.1伪代码
定义一个函数IsSame(int n);
在函数中定义一个数组a[N],利用下标来计录数据,
for读入数据并判断是否有相同的数据
是则返回1,不是则令a[date]=1
end for
返回0;
在主调函数中判断返回值进而输出结果。
2.1.2代码截图
2.1.3造测数据
输入数据 | 输出数据 | 说明 |
---|---|---|
5\n1 2 3 1 4 | YES | 同样例 |
5\n1 1 2 3 4 | YES | 第一个有重复 |
2.1.4 PTA提交列表及说明
1:没有考虑到数据本身可能是个很大的数,导致数组b出错
2:控制循环的条件没有写对
2.2 7.9调查电视节目受欢迎程度
2.2.1伪代码
定义一个数组a用来存放投票的数据
再定义一个数组用下标表示对应选项,内容表示票数
for读入数据 end for
for b[a[i]]++
end for
for 输出b数组从1到8下标对应的值
2.2.2代码截图
2.2.3造测数据
输入数据 | 输出数据 | 说明 |
---|---|---|
10\n 3 4 7 6 3 9 2 3 1 8 | 1 1\n 2 1\n 3 3\n 4 1\n 5 0\n 6 1\n 7 1\n 8 1 | 同样例 |
全投1 | 1号得10票 | 无 |
2.2.4PTA提交列表及说明
1:没有考虑到投票可能不在备选范围中的情况
2:在统计前加一个判断就可以了
2.3 7.5找鞍点
2.3.1伪代码
定义a[] 定义函数GetPoint(int a[][N], int n)
for 读入数据 end for
在函数中
定义maxindex
for
index=0
判断每一行中的最大值
并把下标给maxindex
end for
for
让列等于index
判段该数是否是该列最小的
end for
若内循环执行一遍输出结果
若外循环执行一遍则输出NONE
2.3.2代码截图
2.3.3造测数据
输入数据 | 输出数据 | 说明 |
---|---|---|
4\n1 7 4 1\n4 8 3 6\n1 6 1 2\n0 7 8 9 | 2 1 | 同样例 |
2\n2 2\n2 2 | 0 1 | 最小规模,且有相同选第一个 |
1:在每次找出行最大,判断列数据是否满足后没有将maxindex归零
2:在外层循环中插个maxindex归零就可以了