【牛客网】---参数解析 && 查找组成一个偶数最接近的两个素数

【牛客网】 参数解析 && 查找组成一个偶数最接近的两个素数

题目一描述如下:

在命令行输入如下命令: 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;
}
发布了45 篇原创文章 · 获赞 271 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/L19002S/article/details/103181231