昨天参加360的笔试了,其中第一道编程题是这样的:
输入一个字符串,然后将一个位置的一个字符换成你给的字符,统计函数f(s)的个数。
比如有字符串 .b..bz.... 其中f(s)是指将将连续两个 ".." 换成一个 ‘.’ 最后字符串中没有连续.所需最少的替换次数。
例如: .b..bz....
输入 输出
1 h ---> 4
2 c ---> 3
...
我当时比较紧张,刚刚开始确实没看题目意思,最后提交的代码没有达到要求,所以我私下修改了一下,如下:
#include <iostream>
using namespace std;
int Minfs(char * src,int x,char ch)
{
if (src == NULL)
{
return -1;
}
char *tmpStr = src;
char tmpch = *(src + x); //暂时存放被替换的字符,最后换回来
*(src + x) = ch;
int Minnum = 0;
int tmpNum = 0;
while (*tmpStr != '\0')
{
if (*tmpStr == '.')
{
tmpNum = 0;
while (*tmpStr == '.' && *tmpStr != '\0')
{
tmpNum++;
tmpStr++;
}
Minnum += tmpNum - 1; //统计需要多少次f(s)
}
tmpStr++;
}
*(src + x) = tmpch;
return Minnum;
}
int main()
{
int n = 0, m = 0;
cin >> n >> m;
char *str = new char[n];
cin >> str;
int x;
char c;
while (cin >> x >> c)
{
cout << Minfs(str, x, c) << endl;;
}
return 0;
}
原题目说了很长,其实功能大概就是这样的