蓝桥杯官网练习题(完全日期)

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。

例如:2021 年 6 月 5 日的各位数字之和为 2+0+2+1+6+5=16,而 16 是一个完全平方数,它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。

例如:2021 年 6 月 23 日的各位数字之和为 2+0+2+1+6+2+3=16,是一个完全平方数。所以 2021 年 6 月 23 日也是一个完全日期。

请问,从 2001 年 1 月 1 日到 2021 年 12 月 31 日中,一共有多少个完全日期?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
  public static int year=2001,month=1,day=1;
  public static int[] days=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
  static int ans=0;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        if(year%400==0||(year%4!=0&&year%100==0)){
          days[2]=29;
        }
        else{
          days[2]=28;
        }
        while(true){
          if(year==2021&&month==12&&day==31){
            System.out.println(ans);
            break;
          }
          if(day>days[month]){
            day=1;
            month++;
          }
          if(month>12){
            month=1;
            year++;
          }
          if(check()){
            ans++;
          }
          day++;
        }
        scan.close();
    }
    public static boolean check(){
      int y=year,m=month,d=day,sum=0;
      while(y>0){
        sum=sum+y%10;
        y=y/10;
      }
      while(m>0){
        sum=sum+m%10;
        m=m/10;
      }
      while(d>0){
        sum=sum+d%10;
        d=d/10;
      }
      if(Math.sqrt(sum)%1==0){
        return true;
      }
      else{
        return false;
      }
    }
}

你可能感兴趣的:(蓝桥杯,算法,职场和发展)