C语言II博客作业03

一:作业头

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-3/homework/11922
这个作业的目标 加深对指针的理解
学号 20209186

二:作业

1.1 完成PTA作业,并给出编程题完成截图(5分)

代码截图:

测试截图:

代码截图:

测试截图:

代码截图:

测试截图:

1.2 挑战题目:九宫格键盘对应英语单词

九宫格键盘一般可以用于输入字母。如用2可以输入A、B、C,用3可以输入D、E、F等。

对于号码5869872,可以依次输出其代表的所有字母组合。如:JTMWTPA、JTMWTPB……

您是否可以根据这样的对应关系设计一个程序,尽可能快地从这些字母组合中找到一个有意义的单词来表述一个电话号码呢?如:可以用单词“computer”来描述####号码26678837.

1.咱们不急着一来就上代码,先巴拉一下这道挑战题吧!
2.本题是给我们一串号码数字得到一个有意义的单词,'有意义的单词',好家伙,就想到了文件,但是要有意义岂不是要我把英语大词典搬进去???
3.于是上网搜一波,发现。。。对于这种两袖清风的本菜鸟而言(委屈巴巴~~都要money),只好打开尘封已久的英语四级书,随手抄几十个word上去就了事了
4.解决了文件这题就好办了,依次遍历文件中的每一个单词,看它是否与输入的号码相匹配就OKK啦!!!
5.当然咱们还要减少时间复杂度,所以可以先看单词与号码长度是否相等,不相等就找下一个word了(还有待优化,期待各路神仙的指教)

上代码:

#include<bits/stdc++.h>
using namespace std;

char str[10][5] = { "\0","\0","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };

int SEEK(char ch) {//得到字符ch所在的键盘对应数字
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 5; j++) {
			if (str[i][j] == ch)
				return i;
		}
	}
}

int main()
{

	char num[12];//一般电话号码11位
	int i = 0, j = 0;

	//输入号码不一定有11个数字(没有1)
	cin >> num; //字符串号码 eg: 26678837
	
	FILE* fp;
	if ((fp = fopen("D:\\pikapi  xx\\word.txt", "r")) == NULL) {
		cout << "File open error!" << endl;
		exit(0);
	}

	int nu,con=0;
	char ss[11],ch;

	while (!feof(fp)) {//遍历完文件之前一直循环直到找到or没有
		fscanf(fp, "%s", &ss);//得到文件中的一个单词

		//开始判断
		if (strlen(ss) == strlen(num)) {
			for (i = 0; i < strlen(ss); i++) {
				ch = ss[i];//得到该单词的第i个字符
				nu = SEEK(ch);//得到字符ch所在的键盘对应数字

				if (nu == (num[i]-'0'))
					con++;
			}
			if (con == strlen(ss)) {
				cout << ss << endl;
				return 0;
			}
                    con=0;
		}
	}

	cout << " Not found!!!" << endl;

	if (fclose(fp)) {
		cout << "Can not close the file!" << endl;
		exit(0);
	}

}

测试截图:






文件截图:

2.4 请给出本周学习总结(15分)

1 学习进度条(5分)

周/日期 这周所花时间 代码行 学到的知识点简介 目前比较迷惑的地方
1/3.1 3 150 文件 文件操作中许多函数还不太熟
2/3.13 27 690 STL中部分容器与迭代器,排序 对各个容器的区分与使用,计数排序
6/4.10 27 900 hsah,STL,floyd,二叉树遍历 floyd不够熟练
1.Floyd算法核心代码:加权图中顶点间的最短路径(两点之间最短路径)
2.for (int k = 1; k <= N; k++) {
3.        for (int i = 1; i <= N; i++) {
4.              for (int j = 1; j <= N; j++) {
5.                  if (animal[i][j] > animal[i][k] + animal[k][j]) {
6.                      animal[i][j] = animal[i][k] + animal[k][j];//k即最短路径
7.                  }
8.              }
9.          }
10.      }

2 累积代码行和博客字数(5分)

3 学习内容总结和感悟(5分)

要学的新知识超多的说,单是字符串就可以扩展到许多算法(KMP,字符串hash,AC,SAM...菜菜夏夏都没学多少还),学习路漫漫~~啊吧啊吧,数据结构与算法yyds
posted @ 2021-04-11 11:19  CC小佑  阅读(118)  评论(2编辑  收藏  举报