题目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;
}