六道编程题,题目难度还好,题型覆盖很全,又一次感觉到自己很弱鸡鸡,不能用本地调试,不小心按到一次,就被记录了,吓个半死。然后程序一直有问题,很难受。最近为了弄论文,手有些生疏了,还是怪自己准备不足。只过了两道题,真的很难受。
第一道:相邻的单链表翻转
题目:将一个单项链表中,每两个节点进行翻转
输入:1->2->3->4->5->6
输出:2->1->4->3->6->5
这道题是不会,没有自己完全写过单链表,后面要加强。
链表这块我自己实在是没有写过,不是很会,网上找了一个代码,基本实现功能。大家可以参考一下。
第二道:找出唯一一个只出现过一次的数字。
一个非连续的递增数组,所有的数字会连续出现两遍,只有一个数字出现一遍,请找出这个数字
输入:1,1,2,2,5,6,6,7,7
输出:5
#include<iostream> #include<string> using namespace std; int main() { string str; cin >> str; int len = str.size(); str[len] = ',';//如果不加这一步,后面会少进一次else,结果是最后一个数未参与运算,测试用例只过60% int num = 0; int n; int help = 0; for (int i = 0; i <= len; i++) { if (str[i] != ',') { num = num * 10 + str[i]-'0'; } else { n = num; num = 0; help = help ^ n; } } cout << help << endl; return 0; }
这道题就是异或运算。
第三道:找零的最小方案(给一些特定的零钱,输出张数最小的方案。)
题目:给定不同面额的硬币coins,和一个总金额change.用最小的硬币数量。如果没有组合达到,返回-1.
输入1:1,2,5;11
输出1:3(5+5+1)
输入2:2;3
输出2:-1
第四道:一个数,奇数+1,偶数减半,直到最后为1,一共操作了几次。
#include<iostream> using namespace std; int main() { int num, n = 0; cin >> num; if (num % 2 == 1) { num += 1; n++; } else { num /= 2; n++; } cout << n << endl; return 0; }
第五道:在一个很大的棋盘上,随机放入n个棋子,将棋子的坐标依次报出来,(x1,y1)、...、(xn,yn),根据五子棋盘上的点的位置,
1.判断所有子是否落在两条线上x=a,y=b,
2.若有多条线,输出a*1000+b值最小的组合
3.a,b的取值均为正整数
输入1:3;2,2;3,3;5,5
输出1:-1,-1
输入2:2;2,2;3;3
输出:2,3
第六道:字符匹配。
题目:glob是一种Unix风格的路径匹配模式,其规则如下:
1.字符/作为分隔符存在
2.字符*匹配除/之外的任意长度的任意字符
3.字符?匹配除/之外的单个长度的任意字符
4.中括号[]用来转移‘*’、‘?’、‘['、’]‘这四个特殊字符,一次转义一个字符
5.其他字符保持原有含义
6.对’.‘号开头的文件夹或者文件名,规则1,2不生效
输入1:“pattern. *”,"pattern.txt"
输出1:true
输入2:“dir/*”,"dir/.env"
输出2:false
先写这么多,后面再更~
欢迎大佬们赐教~
2020.06.22 把AC的两道题的代码更了。和相关的题干更了~
全部评论
(29) 回帖