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)" 的方法求解,这种写法使问题简单化。所以我们不能拘泥于老师的做法,而应该有自己的想法和见解。