C语言博客作业04--数组

0.展示PTA总分(0----2)

Ms9LZ9.png
Ms9zRK.png
MsCZJP.png

1.本章学习总结(2分)

1.1 学习内容总结

  • 哈希数组用法:就是将一个数组中的内容作为另一个数组(该数组的数据全部初始化为零)的下标,然后输入一个数时,直接将该数作为另一个下标数组的下标,以此来统计一个数出现的次数或者判断有无重复数据。目前学过的案例有pta里的判断重复数据,就是用上述方法来判断是否出现重复数据,如果输入一个数,该数所对应的下标数组内容如果是0的话就将其改为1,如果是一的话就说明该数已经出现过一次了,就说明该数是重复数据。

  • 数组中删除数据可以将重该位置开始的数据,把所有数据都往前移一个位置,也就是将该位置的数据用后一个数据来代替。也可以重新定义一个数组,重新存放除要删除的数据之外的所有数据。也可以用下标法来删除数据,即删除该数据所对应的数据下标,然后将之后的数组下标往前移一格。

    1.2 本章学习体会

    没有建议非常好

    500行吧

    2.PTA实验作业(7分)

#include<stdio.h>
int main() {
	char a[80];
	gets(a);
	char b[80];
	b[0] = a[0];
	b[1] = '\0';
	int flag = 0;
	int k = 1;
	for (int i = 1; a[i] != '\0'; i++) {
		for (int j = 0; b[j] != '\0'; j++) {
			if (a[i] == b[j]) {
				flag = 1;
				break;
			}
		}
		if (flag == 0) {
			b[k++] = a[i];
			b[k] = '\0';
		}
		flag = 0;
	}
	int cnt = 0;
	for (int i = 0; b[i] != '\0'; i++) {
		cnt++;
	}
	for (int i = 0; i < cnt - 1; i++) {
		for (int j = 0; j < cnt - 1 - i; j++) {
			if (b[j] > b[j + 1]) {
				char temp = b[j];
				b[j] = b[j + 1];
				b[j + 1] =temp;
			}
		}
	}
	puts(b);
}
就遍历删除重复字符接着冒泡排序

也可以用哈希数组,用空间换时间,ascll码最大到255,一旦数组的值为1就说明已存在不必再存入

实现代码如下:

#include<stdio.h>
#include<string.h>
int main() {
	char a[80];
	gets(a);
	int b[300] = { 0 };//哈希数组   数组初始化都为0
	int n = strlen(a);
	int k = 0;
	for (int i = 0; i < n; i++)	//b数组的下标就是ascll码
	{
		if (b[a[i]] == 1) {
			continue;
		}
		b[a[i]]++;	
	}
	for (int i = 0; i < 200; i++) {   //遍历输出如果为1就说明有这个字符
		if (b[i] == 1) {
			printf("%c", i);
		}
	}
}

//特地花时间去写的呢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

3.阅读代码(-2--1分)

MseGFg.png

题目不难 但是全对很难 当数据很大的时候会超时

这时学了个素数筛法很强大实现代码如下:

#include<stdio.h>
int p(int n) {
	int a[1000000] = { 0 };
	int cnt = 0;
	for (int i = 2; i <= n; i++) {
		if (!a[i]) {
			cnt++;
			for (int j = 2 * i; j <= n; j += i) {
				a[j] = 1;
			}
		}
	}
	return cnt;
}
int main() 
{
	int n;
	scanf("%d", &n);
	int c = p(n);
	printf("%d", c+1);
}

代码解析:

 首先,2是公认最小的质数,所以,先把所有2的倍数去掉;然后剩下的那些大于2的数里面,最小的是3,所以3也是质数;然后把所有3的倍数都去掉,剩下的那些大于3的数里面,最小的是5,所以5也是质数……
  上述过程不断重复,就可以把某个范围内的合数全都除去(就像被筛子筛掉一样),剩下的就是质数了。维基百科上有一张很形象的动画,能直观地体现出筛法的工作过程。

posted @ 2019-11-17 21:32  c陈艺彬  阅读(236)  评论(1编辑  收藏  举报