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归零就可以了

posted @ 2019-11-17 22:25  一个敢敢  阅读(219)  评论(0编辑  收藏  举报