C博客作业04--数组

0.展示PTA总分



1.本章学习总结

1.1学习内容总结

1.数组中如何查找数据?

若要查找num,我的做法:遍历数组,当遇到num时,记录其下标,这样就知道它在数组中的位置了。

for(int i=0;i<n;i++)
{
if(a[i]==num)
int loc=i;
}

2.数组中如何插入数据?

我的做法,先遍历数组,找到要插入的位置,然后将之后的数组右移

for(int i=0;i<n;i++)
{
if(判断条件)
{
loc=i;
a[loc]=a[i]
for(i=n;i>=loc+1;i--)
{
a[i]=a[i-1];
}
}
}

3.数组中如何删除数据

我的做法:先遍历数组,找到要删除的数据num,从num的下标+1开始,从后往前左移一个位置

for(int i=0;i<n;i++)
{
if(判断条件)
{
loc=i
}
for(i=loc+1;i<n;i++)
{
a[i]=a[i+1];
}
}

4.数组中目前学到排序方法,主要思路

1.冒泡排序法:有n个数,则循环n-1趟,a[i]和a[i+1]比较。
下图是PTA中的某题部分代码截图,用到的冒泡排序

2.选择排序法:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

4.哈希数组用法

案例:一维数组题目集 7-5 有重复的数据

1.2本章学习体会

1.数组的题目,尤其是字符型数组,感觉不是很好做,一些段错误,答案错误仍未解决。
2.这两周的代码量(3个数组PTA作业):1044行。没有达到目标。

2.PTA实验作业

2.1 7-5 有重复的数据

2.1.1伪代码

static int hash[MAX];//定义哈希数组
for (i = 1; i <= n; i++)
then
scanf("%d", &data);
if (hash[data] == 1)
then{return 1;}
end if
else
{hash[data] = 1;}
end else}

2.1.2代码截图

2.1.3 造测试数据

2.1.4 PTA提交列表及说明

1.部分正确:第一次写没有用哈希数组做,而是用嵌套循环,这样当n很大的时候,就要循环很多次,会运行超时。

2.2 7-2 IP地址转换

2.2.1伪代码

//输入数组
char str[32];
for (i = 0; i < 32; i++)
then scanf("%c", &str[i]);
//之后将数组分成4个部分,一个部分8个数据
for (i = 7; i >=0; i--)
sum =sum+ (str[i] - '0') * pow(2, k);
k++;
printf("%d.", sum);
sum = 0;//sum归零,因为后面还要再用
k = 0;//k归零,因为后面还要再用
//后面3组同理

2.2.2代码截图

2.2.3 造测试数据

2.2.4 PTA提交列表及说明

2.3 7-4 删除重复字符

2.3.1伪代码

char str1[N]; 
char str2[N];
//第二个数组用来保存删除重复数据后的数组
for (i = 0; i < len1; i++) //查重
flag = 0;
for (j = 0; j < i; j++)
if (str1[i] == str1[j])
flag = 1;
end if
end for
if (flag == 0)
str2[count] = str1[i];
count++;  //记录不重复字符的个数
end if
end for

2.3.2代码截图

2.3.3 造测试数据

2.3.4 PTA提交列表及说明

1.多种错误:这是本题我用的输入数组的方法:

而一开始我是这么输入的:

我这样的写法的话,回车就不会被吸收,就会出错。

3.阅读代码



这道题是用二分查找的方法来求解的。但是与我们做平时的二分查找不同,平时用的是 "while(left < right)"的方式求解,
但这题用的是"while(left <= right)" 的方法求解,这种写法使问题简单化。所以我们不能拘泥于老师的做法,而应该有自己的想法和见解。

posted @ 2019-11-17 22:06  王柏鸿  阅读(218)  评论(0编辑  收藏  举报