はじめに:私は(書いた2013年第四ブルーブリッジカップ最初の質問に対応し、問題の日付を解決する能力を向上させるための主な質問https://blog.csdn.net/qq_43966129/article/details/105328967)、対象月比較の基準は、兄はスキップすることができます。
問題
私は怠け者ですので、私は、タイトルを書きタイトルリンクを入れていません
不吉な日https://vjudge.net/problem/OpenJ_Bailian-2723
思考
日数は毎月格納する配列を作成するには
1月13日金曜日かどうかを計算し
、その後、1月から他の月を考慮すること
コード
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
/**
* @param args
* 这是 世纪末的星期 问题的拓展1
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// 这一题由于是输入星期,不知道哪一年,没有使用Calendar
int week = _01Reader.nextInt();
// 创建数组,存储每个月份的天数
// 没有加十二月,因为十一月+30天就可以判断12月13号是否是星期5了
int[] day = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
//加上限制条件,保证程序健壮性
if (week >= 1 && week <= 7) {
// 先计算1月份的13号是否是星期五
// 因为题目给的是1月1日,所以这里加12,就变成13号
week = (week+12)%7;
if (week == 5) {
System.out.println(1);
}
//考虑其它月份
for (int i = 0; i < day.length; i++) {
week = (week+day[i])%7;
if (week == 5) {
//这里困惑了我很长时间,举一个例子,比如如果计算2月份13日,那么就是week-13+31+13==week+day[0]
//所以因为如果2月是答案,就要输入i(i这个时候是0)+2
System.out.println(i+2);
}
}
}
}
}
class _01Reader {
static BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
static StringTokenizer tokenizer = new StringTokenizer("");
static String next() throws Exception {
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(br.readLine());
}
return tokenizer.nextToken();
}
static String nextLine() throws Exception {
return br.readLine();
}
static int nextInt() throws Exception {
return Integer.parseInt(next());
}
}
この問題の拡大
トピックスアドレス
https://www.nowcoder.com/pat/2/problem/359
対象の説明
外国では、毎月13日の週の日と5は不運です。その日は、より多くの不運、月の13日の週であることを起こる場合は特に。
今、あなたの年を与えるために、あなたは、大出力の小さなすべての年は、月の13日の週です。
説明入力:
複数組を含むデータの入力、正の整数年(2000≤year≤9999)を含むデータの各セット。
出力説明:
データの各セットに対応し、すべての適格月の出力、月はスペースで区切られました。
何年がない場合は、月の13日は金曜日、ライン意志幸運です。
入力例:
2000年
2001年
2002年の
例出力:
10
4 7。
9〜12です。
アイデア:タイトルはあなたがタイトルを計算に与えられている今年は、Calendarクラスを使用して作る場合でも、特定の週で
、私はそれが良いの開発であると考え、この問題への鍵は、今年、フラグをレコードを設定する必要があります不運日付があったかどうか
コード
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int year = scanner.nextInt();
Calendar calendar = Calendar.getInstance();
// 用于最后判断这一年是否有不吉利日期
int flag = 0;
// 月份是从0开始到11
for (int month = 0; month <= 11; month++) {
calendar.set(calendar.YEAR, year);
calendar.set(calendar.DAY_OF_MONTH, 13);
calendar.set(calendar.MONTH, month);
int week = calendar.get(calendar.DAY_OF_WEEK);
//根据API星期五在第六个
if (week == 6) {
if (flag == 0) {
System.out.print(month + 1 + " ");
flag = 1;
} else {
System.out.print(month + 1+ " ");
}
}
}
//但凡出现了不吉利日期,不会走到这里
if (flag == 0) {
System.out.println("Luck");
}
//这里一定要换行,不然会报错
System.out.println();
}
scanner.close();
}
}