C语言II博客作业03
一、作业头
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/CST2020-4 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-4/homework/11920 |
这个作业的目标 | strstr函数,了解到还有<ctpye.h>这个头文件 |
学号 | 20209078 |
二、本周作业
2.1 完成PTA作业,并给出编程题完成截图(5分)
第一题
提交结果
第二题
提交结果
第三题
提交结果
2.2 挑战题目:九宫格键盘对应英语单词
九宫格键盘一般可以用于输入字母。如用2可以输入A、B、C,用3可以输入D、E、F等。如图所示:
对于号码5869872,可以依次输出其代表的所有字母组合。如:JTMWTPA、JTMWTPB……
您是否可以根据这样的对应关系设计一个程序,尽可能快地从这些字母组合中找到一个有意义的单词来表述一个电话号码呢?如:可以用单词“computer”来描述号码26678837.
题目来源:《编程之美——微软技术面试心得》 稍有修改
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
FILE* fp = fopen("C:\\Users\\周宽\\Desktop\\新建文本文档.js", "r");
char msg[20];
char a[20] = { };
char c[10][10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
int total[10] = { 0,0,3,3,3,3,3,4,3,4 };
int number[12];//电话号码,电话号码的长度最长不能超过12个数字
int answer[12] = { 0 };//数字目前所代表的字符在其所能代表的字符集中的位置
int n;//记录电话号码的实际长度
int b = 0;
scanf("%d", &n);//输入电话号码长度
for (int i = 0; i < n; i++)
{
scanf("%d", &number[i]);//输入号码,输入格式:* * * *
}
while (1)
{
fgets(msg, 20, fp);
while (1)
{
for (int i = 0; i < n; i++)
{
a[i] = c[number[i]][answer[i]];
}
if (strstr(msg, a)) {
b = 1;
printf("%s", a);
return 0;
}
int k = n - 1; // k=TelLength-1
while (k >= 0)
{
if (answer[k] < total[number[k]] - 1)
{
answer[k]++;
break;
}
else
{
answer[k] = 0;
k--;
}
}
if (k < 0) break;
}
}
if (b == 0) {
printf("NULL");
}
return 0;
}
这个代码还有不足,但基本满足要求。只能输出一个,然后就是“字典”中没有的词就会输出NULL。看样例:
算是做出来了。。。。
文件链接:新建文本文档.js
其实就是txt,然后为了传博客园改成的js,内容没变化。
2.3 请给出本周学习总结(15分)
1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
3/1-3/3 | 2h | 108 | 无 | 一堆,甚至于叫不上名字 |
3/4-3/10 | 5h | 96 | 二分查找法 | 无 |
3/11-4/10 | 10h | 104 | 无 | 无 |
2 累积代码行和博客字数(5分)
时间 | 博客字数 | 代码行数 |
---|---|---|
第一周 | 2550(667) | 108 |
第二周 | 3961(3047) | 96 |
第三四周 | 1725(1850) | 104 |
3 学习内容总结和感悟(5分)
学习内容总结:
- 字符数组,文件引用,字符串的输入和输出
感悟:
- 很快啊,一周又没了。不提前学啥都不懂,彭老师,讲慢点吧,别开火箭了。