OpenJ_Bailian-2723不吉な日(Javaバージョン)

はじめに:私は(書いた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();
    }
}

日付とカレンダーへのコメント

https://www.cnblogs.com/xiaxj/p/7929341.html

公開された60元の記事 ウォンの賞賛4 ビュー1262

おすすめ

転載: blog.csdn.net/qq_43966129/article/details/105331622