题目---改大写及自动售货机及删除指定元素
2019春第七周作业
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2935 |
我在这个课程的目标是 | 熟练运用指针 |
这个作业在那个具体方面帮助我实现目标 | 更加熟练使用结构体 |
参考文献 | 挑战程序设计 |
第一题
6-2 每个单词的最后一个字母改成大写 (10 分)
函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。
函数接口定义:
void fun( char *p );
其中 p
是用户传入的参数。函数将 p
所指字符串中每个单词的最后一个字母改成大写。
裁判测试程序样例:
1 #include <stdio.h> 2 void fun( char *p ); 3 int main() 4 { 5 char chrstr[64]; int d ; 6 gets(chrstr); 7 d=strlen(chrstr) ; 8 chrstr[d] = ' ' ; 9 chrstr[d+1] = 0 ; 10 fun(chrstr); 11 printf("\nAfter changing: %s\n", chrstr); 12 return 0; 13 } 14 15 /* 请在这里填写答案 */
输入样例:
my friend is happy
输出样例:
After changing: mY frienD iS happY
实验代码(自定义函数)
1 void fun(char * p) 2 { 3 int len = strlen(p); 4 for (int i = 0; i < len; i++) 5 { 6 if (p[i + 1] == ' ') 7 p[i] =p[i]- 32; 8 } 9 return; 10 }
设计思路
调试过程中遇到的问题及解决方法
无
运行结果截图
第二题
7-2 自动售货机 (30 分)
实验代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define MAXN 10000 4 int balance; 5 6 struct shop { 7 int num = 0; 8 int price[10] = { 1,1,1,2,2,3,3,3,4,4 }; 9 char str[10][100] = { "Table-water","Table-water","Table-water","Coca-Cola","Milk","Beer","Orange-Juice","Sprite","Oolong-Tea", "Green-Tea" }; 10 }; 11 12 13 int main(int argc, const char * argv[]) 14 { 15 struct shop name[11]; 16 int sum = 0, change, money, i = 0, number[MAXN]; 17 18 while (1) { scanf("%d", &money); if (money == -1)break; sum += money; } 19 balance = sum; 20 while (1) { scanf("%d", &number[i++]); if (number[i - 1] < 0)break; } 21 22 23 for (int j = 0; j < i; j++) { 24 if ((balance - name[number[j] - 1].price[number[j] - 1] >= 0) && number[j] != -1) { 25 balance -= name[number[j] - 1].price[number[j] - 1]; 26 name[number[j] - 1].num++; 27 } 28 if (balance - name[number[j] - 1].price[number[j] - 1] < 0) { cout << "Insufficient money" << endl; return 0; } 29 if (number[j] == -1) { break; } 30 } 31 32 33 cout << "Total:" << sum << "yuan,change:" << balance << "yuan" << endl; 34 for (int j = 0; j < 10; j++) 35 { 36 if (name[j].num != 0)cout << name[j].str[j] << ":" << name[j].num << ";"; 37 } 38 39 40 return 0; 41 }
设计思路
本题调试过程中遇到的问题及解决方法
这道题我被坑惨了,先是题意,上面说每当判断一个商品就会看余额够不够,不够就输出“Insufficient money”,我一开始一为是假如第一个商品钱够,第二个不够,就会输出 XXX(商品):1;然后换行输出“Insufficient money”,结果是只要其中有一个钱不够,就输出“Insufficient money”,太坑了!然后是第二点是我自己坑自己,商品名称,我把“-”号打成“_”然后一直错误错误,发现结果是错了名字之后想拍死自己,各位一定要认真看变量名啊啊啊啊啊啊!!!
运行结果截图
第三题
7-1 使用函数删除字符串中的字符 (10 分)
实验代码
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 6 void delchar(char * arr, char zf) { 7 int len = strlen(arr); 8 int count=0; 9 vector<char> str; 10 str.clear(); 11 for (int i = 0; i < len; i++) 12 { 13 str.push_back(arr[i]); 14 if (arr[i] == zf) 15 { 16 str.erase(str.begin()+(i-count)); 17 count++; 18 } 19 } 20 int x = len - count; 21 cout<<"result: "; 22 for(int i = 0 ; i < x ;i++) 23 cout << str[i]; 24 cout<<endl; 25 } 26 27 int main(int argc, const char * argv[]) 28 { 29 int T; 30 cin >> T; 31 while (T--) { 32 char str[1000]={'\0'},zf; 33 string s; 34 getchar(); 35 getline(cin,s); 36 int len = s.length(); 37 for(int i = 0 ; i < len ; i++){str[i] = s[i];} 38 scanf("%c",&zf); 39 delchar(&str[0],zf); 40 } 41 42 return 0; 43 }
设计思路
本题调试过程中遇到的问题及解决方法
一开始元素删除是删除了,但是从第二个字符串开始,就会保留上一次的字符串内容,后来发现忘记将字符串数组初始化了
运行结果截图
-------------------------------------------------------------------------------------------------------------------------
挑战作业(持续完善中)……
讲一下挑战作业关于我自己不成熟的思路吧,就是用深度搜索去找出每一个正数块,然后找出每个正数块的最小权值路径,连接起来,并且判断连接后的块是否比单独最大块大,如果没有,则输出单独块。但是关于找最小权值路径的复杂度似乎有点小大...而且块边缘处理不是很成熟,有点难搞,不过可以去尝试着挑战一下第二种情况,感觉还行..如果要全部情况同时完成..(对不起,打扰了)。
结对编程感想:
此次结对编程对问题的解析更为深刻,在不断讨论的过程中和搭档一起研究出了几种解决问题的方法,发现了新思路,由于此次题目比较新颖有趣,所以解题过程还是很快乐滴,对指针和数据结构的了解和利用更加熟练了,并且与搭档合作更加默契了,对于解题很有帮助!
|
存在的问题 | 心得 | 完成作业消耗时间 | 本周学习内容 | |
第一周 | 对文件读取数据的运用不是很熟练 | 多去看关于刷题的书籍,有助于提高自己写题能力,实在不会的可以参考大佬的代码,加以自己理解之后去默写几遍 | 半个小时左右 | 文件输入,BFS,DFS,PARTITION算法及简单的贪心算法 | |
第二周 | 对单纯用数组完成双向链表的操作还是太生疏了,说明对双向链表的运作原理不熟 | 推荐两本比较好的书《挑战程序设计》《算法竞赛》 | 半个小时左右 | vector数组及list双向链表操作 | |
第三周 | 指针的概念太久没记有点生疏了 | 对vector数组使用愈加熟练 | 一小时左右 | 数据结构 | |
第四周 | 对联通二维数组的最大子数和自闭了 | 多看些算法,不然写题目用什么方法去解决都弄不清 | 基础题目10分钟,挑战作业现在都在自闭中 | 迭代器 | |
第五周 | 最小权值路径最优解该用什么解法 | 多思考一下如何优化自己的代码,会有新的收获 | 一个小时 | 递归和分治法 |