【牛客网】—— 华为机试在线练习整理

题目ID:36884 - 查找组成一个偶数最接近的两个素数

题目描述

任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对
输入描述:

输入一个偶数

输出描述:

输出两个素数

示例1

输入:20
输出:7 13

解题思路

该题思路是:我们先实现一个判断一个树是否为素数的子函数,如何判断一个数是否为素数,那就很简单了,for循环让n除以从2开始到sqrt(n)的所有数,若是均不能整除,则n是素数,反之不是。实现好子函数后,我们再来找某数2等于最近两个素数相加的两个数,最近,我们就应该从中间开始往两边找,然后通过刚刚写的子函数来判断两个数是不是素数,不是就一个++,另一个–,直到找到为止。

代码实现

#include <iostream>
#include <algorithm>

using namespace std;

bool IsPrime(int n)
{
	for (int i = 2; i <= sqrt(n); ++i)
	{
		if (n % i == 0)
			return false;
	}
	return true;
}
int main()
{
	int num;
	int half;
	int i;
	while (cin >> num)
	{
		half = num / 2;
		//从中间向两边找
		for (i = half; i > 0; i--)
		{
			if (IsPrime(i) && IsPrime(num - i))
				break;
		}
		cout << i << endl << num - i << endl;
	}
	return 0;
}

题目ID:36898-参数解析

题目描述

在命令行输入如下命令:
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.输入由用例保证,不会出现不符合要求的输入

输入描述:

输入一行字符串,可以有空格

输出描述:

输出参数个数,分解后的参数,每个参数都独占一行

解题思路

  • 这里解题思路比较巧妙了,因为我们需要统计参数的个数,并且这些参数是用空格区分的,所有我们这里处理的时候用cin接收输入之后将这个参数依次存放如vector中,通过调用vector的size()计算参数的个数,输出即可
  • 接下来就是进行参数的解析了,这里的处理方法也是很简单的,我们通过for循环遍历vector数组,分别拿到每个参数,这里也只需要处理最后一个参数的特殊情况,就是最后一串得一起输出,而不是单个,其余的参数拿到直接输出即可

代码实现

#include <iostream>
#include <string>
#include <cstring>
#include <vector>
using namespace std;
int main()
{
    string str;
    vector<string> v;
    while(cin >> str)
    {
        v.push_back(str);
    }
    cout << v.size() << endl;
    string cmd;
    string cur;
    for(size_t i = 0;i < v.size();++i)
    {
        cmd = v[i];
        if(cmd[0] == '\"')
        {
            int size = cmd.size();
            cur = cmd.substr(1,size-2);
            cout << cur <<endl;
        }
        else
        	cout << cmd << endl;
    }
    return 0;
}

题目ID:36897-计算日期到天数转换

题目描述

根据输入的日期,计算是这一年的第几天。。
详细描述:
输入某年某月某日,判断这一天是这一年的第几天?。
接口设计及说明:

 /*****************************************************************************
 Description   : 数据转换
 Input Param   : year 输入年份
                Month 输入月份
                Day 输入天
                    
 Output Param  :
 Return Value  : 成功返回0,失败返回-1(如:数据错误)
 *****************************************************************************/
 public static int iConverDateToDay(int year, int month, int day)
 {
     /* 在这里实现功能,将结果填入输入数组中*/ 
     return 0;
 }
 
 /*****************************************************************************
 Description   : 
 Input Param   :
                    
 Output Param  :
 Return Value  : 成功:返回outDay输出计算后的第几天;
                                           失败:返回-1
 *****************************************************************************/
 public static int getOutDay()
 {
  return 0;
 }

输入描述:

输入三行,分别是年,月,日

输出描述:

成功:返回outDay输出计算后的第几天;
失败:返回-1

解题思路

  • 这题思路很简单,用一个数组存放每月的累积天数 输入的日期天数= 当月的天数 + 当月之前的累积天数 如果包含二月,再去判断是否为 闰年,如果是闰年,再加1天即可#### 代码实现

代码实现

#include <iostream>
using namespace std;
int main()
{
    int array[12] = {31,59, 90, 120, 151, 181, 212,
    243, 273, 304, 334, 365};
    int year;
    int month;
    int day;
    int sum = 0;
    while(cin >> year >> month >> day) 
    {
        sum = 0;
        sum += array[month - 2];
        sum += day;
        if(month > 2)
        {
            if((year % 4 == 0 && year % 100 != 0)
            || year % 400 == 0) 
                sum += 1;
        }
        cout << sum <<endl;
    }
    return 0;
}
发布了167 篇原创文章 · 获赞 175 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chenxiyuehh/article/details/91302327