2021年第十二届蓝桥杯决赛JAVA B C题"完全日期"
解析:用calendar枚举所有日期,每次枚举只需要将date+1,calendar的好处在于可以帮你把不合法的日期给合法化。需要注意的其中是月份是从0开始。(此外,星期是从日开始)
import java.util.Calendar;
public class C {
public static void main(String[] args) {
int[] pf = new int[100];
for(int i=0;i<=9;i++) pf[i*i]=1;//算他所有数位全是9,最大也才是72
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2001);
c.set(Calendar.MONTH, 0);
c.set(Calendar.DATE, 1);
int result = 0;
while(true) {
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH)+1;
int d = c.get(Calendar.DATE);
int t = 0;
for(int i=0;i<(y+"").length();i++) t+=(y+"").charAt(i)-'0';
for(int i=0;i<(m+"").length();i++) t+=(m+"").charAt(i)-'0';
for(int i=0;i<(d+"").length();i++) t+=(d+"").charAt(i)-'0';
if(pf[t]==1) result++;
if(y==2021&&m==12&&d==31) break;
c.set(Calendar.DATE, d+1);
}
System.out.println(result);//977
}
}