题目描述
根据输入的日期,计算是这一年的第几天。。
测试用例有多组,注意循环输入
输入描述:
输入多行,每行空格分割,分别是年,月,日
输出描述:
成功:返回outDay输出计算后的第几天;
失败:返回-1
示例1
输入
2012 12 31
输出
366
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
int y = scanner.nextInt();
int m = scanner.nextInt();
int d = scanner.nextInt();
int sum = 0;//计算总天数
int[] day = {31,59,90,120,151,181,212,243,273,304,334,365};
if(m >= 2){
sum += day[m - 2];
}
sum += d;
if(m >= 2){
if(y % 4 == 0 && y %100 != 0 || y % 400 == 0){
sum += 1;
}
}
System.out.println(sum);
}
}
}
一个袋子里面有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
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = scanner.nextInt();
}
Arrays.sort(arr);
int num = count(arr,n,0,0,1);
System.out.println(num);
}
//计算幸运袋子的个数
public static int count(int arr[],int n,int pos,int sum,int multi){
int count = 0;
for(int i = pos;i < n; i++){
sum += arr[i];
multi *= arr[i];
if(sum > multi){
count = count + 1 + count(arr,n,i + 1,sum,multi);
}else if(arr[i] == 1){
count = count + count(arr,n,i + 1,sum,multi);
}else{
break;
}
//回溯
sum = sum - arr[i];
multi = multi / arr[i];
while(i < n - 1 && arr[i] == arr[i + 1]){
i++;
}
}
return count;
}
}