文章目录
参数解析
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
// int count=0;
// for(int i=0;i<s.length();i++){
// if(s.charAt(i)==' '){
// count++;
// }
// if(s.charAt(i)=='"'){
// do{
// count++;
// }while(s.charAt(i)!='"');
// }
// }
// System.out.println(count+1);
// int flag=1;//第一个双引号出现的时候flag变为零,等遇到第二个双引号的时候,flag1
// for(int i=0;i<s.length();i++){
// if(s.charAt(i)!=' '&&s.charAt(i)!='"'){
// System.out.print(s.charAt(i));
// }
// if(s.charAt(i)=='"'){
// flag=flag^1;
// }
// if(s.charAt(i)==' '&&flag==0){
// System.out.println(s.charAt(i));
// }
// if(s.charAt(i)==' '&&flag==1){
// System.out.println();
// }
// }
String[]arr=s.split(" ");
System.out.println(arr.length);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
日期—>天数转换
涉及闰年
闰年:
(1)十年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。
(2)每四百年再一闰:如果year能够被400整除,则year是闰年。
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in) ;
while(sc.hasNext()){
int year = sc.nextInt() ;
int month = sc.nextInt() ;
int day = sc.nextInt() ;
int Day = getDay(year, month, day) ;
System.out.println(Day);
}
}
public static int getDay(int year,int month,int day){
int [] Day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} ;
if((year%4==0&&year%100!=0)||year%400==0){
Day[1]=29;
}
int sum=0;
for(int i=0;i<month-1;i++){
sum=sum+Day[i];
}
return sum+day;
}
}
幸运的袋子
思路
将球按标号升序排序。每次从小到大选择,当选择到a1,a2,…,ak-1时满足给定条件,而再增加选择ak
时不满足条件(ak必然大于等于max(a1,a2,…,ak-1)),继续向后选择更大的数,必然无法满足!此时不必再继续向后搜索。如果有多个1,即当k=1时,sum(1)>pi(1)不满足,但下一个元素仍为1,则可以满足
1+1>1*1, 所以要判断当前ak是否等于1,如果等于1,虽然不能满足,组合的个数不能增加,但是继续向后搜索,仍然有满足条件的可能.对于重复数字,组合只能算一个,要去重。
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0;i < n;i++){
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
System.out.println(find(arr, 0, 0, 1));
}
}
private static int find(int[] arr,int index,long sum,long multi){
int count = 0;
for(int i = index;i < arr.length;i++){
sum += arr[i];
multi *= arr[i];
if(sum > multi){
count = count + 1 + find(arr, i+1, sum, multi);
}
else if (arr[i] == 1) {
//处理待判断的序列第一个数为1的时候,
//那个1虽然不满足和大于积,但是要保留,继续往下考虑
count = count + find(arr, i+1, sum, multi);
}
else {
break;
}
sum -= arr[i]; //sum和multi在下一循环中还会用到
multi /= arr[i];
for(;i < arr.length-1 && arr[i] == arr[i+1];i++){
// i++; //拥有相同号码的球是无区别的,因此跳过
}
}
return count;
}
}