【牛客网】 参数解析 && 查找组成一个偶数最接近的两个素数
题目一描述如下:
在命令行输入如下命令: xcopy /s c:\ d:\, 各个参数如下: 参数1:命令字xcopy 参数2:字符串/s
参数3:字符串c:\ 参数4: 字符串d:\ 请编写一个参数解析程序,实现将命令行各个参数解析出来。解析规则:
1.参数分隔符为空格
2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d:\”时,参数仍然是4个,第3个参数应该是字符串C:\program
files,而不是C:\program,注意输出参数时,需要将“”去掉,引号不存在嵌套情况。
3.参数不定长
4.输入由用例保证,不会出现不符合要求的输入
- 解题思路:首先我们创建两个字符串s、str,再建立一个栈,定义一个flag,从第一个字符开始往后读取,在没有遇到空格或者引号的时候,先将它存放在字符串str中,若遇到空格就就将字符串str倒入栈中,若遇到前引号和没有遇到后引号这段时间里,把走过的字符照样存入字符串str中。等到遇到后引号时结束该次判断,继续寻找空格和前引号,若没有,继续执行上述将s读取存入str中的操作。
代码如下:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
string s;
while(getline(cin,s))
{
vector<string> v;
int flag=0;
string str;
for(size_t i=0;i<s.size();++i)
{
if(flag)
{
if(s[i]!='\"')
{
str+=s[i];
}
else
{
flag=false;
}
}
else
{
if(s[i]==' ')
{
v.push_back(str);
str="";
}
else if(s[i]=='\"')
{
flag=true;
}
else
{
str+=s[i];
}
}
}
v.push_back(str);
cout<<v.size()<<endl;
for(size_t i=0;i<v.size();++i)
{
cout<<v[i]<<endl;
}
}
return 0;
}
题目二描述如下:
- 解题思路:本题其实非常简单,不要被题目的长度吓到了,将输入的数据均分为2,一个为i,一个为j,一半往大的方向找,一半往小的方向找,再利用二分法循环判断该数是否为素数,若i和j一旦同时都满足素为数,则立刻输出,表示找到。
代码如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
int IsSu(int n)
{
int i = 0;
for (i = 2; i < n / 2; ++i)//二分法
{
if (n%i == 0)
return false;
}
return true;
}
int main()
{
int input ;
int i, j;
while (cin >> input)
{
for (i = input / 2, j = input / 2; i >= 0, j <= input; --i, ++j)
{
if (IsSu(i) && IsSu(j))
{
cout << i << endl << j << endl;
break;
}
}
}
return 0;
}