题目描述
根据输入的日期,计算是这一年的第几天。。
详细描述:
输入某年某月某日,判断这一天是这一年的第几天?。
接口设计及说明:
/*****************************************************************************
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
输入
2012
12
31
输出
366
#include <iostream>
using namespace std;
int main()
{
int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int year, month, day;
while (cin >> year >> month >> day)
{
if (year <= 0)
return -1;
if (month > 12 && month <= 0)
return -1;
if ((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 != 0))
{
arr[2] = arr[2] + 1;
}
if (day > arr[month])
{
return -1;
}
for (int i = 1; i < month; i++)
{
day += arr[i];
}
cout << day << endl;
}
return 0;
}
题目描述
一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。
输入描述:
第一行输入一个正整数n(n ≤ 1000)
第二行为n个数正整数xi(xi ≤ 1000)
输出描述:
输出可以产生的幸运的袋子数
示例1
输入
3
1 1 1
输出
2
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int getLuckPacket(int x[], int n, int pos, int sum, int multi)
{
int count = 0;
for (int i = pos; i < n; i++)
{
sum += x[i];
multi *= x[i];
//找到以i开始的所有可能组合
if (sum > multi)
{
count += 1 + getLuckPacket(x, n, i + 1, sum, multi);
}
else if (x[i] == 1)
{
//虽然当前不满足,但当当前为1时,有几率满足
//例如 1,1,2,5,1
count += getLuckPacket(x, n, i + 1, sum, multi);
}
else
{
break;
}
//每次搜索前将上次位置重置
sum -= x[i];
multi /= x[i];
while (i < n - 1 && x[i] == x[i + 1])
{
//去重
i++;
}
}
return count;
}
int main()
{
int n;
int x[1000];
while (cin >> n)
{
for (int i = 0; i < n; i++)
{
cin >> x[i];
}
sort(x, x + n);
cout << getLuckPacket(x, n, 0, 0, 1);
}
return 0;
}