Java入門(第5回)

前回演習問題の解答例

問題1

問題文

判定したい西暦年Nが与えられるので、その年がうるう年かどうかを判定してください。

うるう年の定義は

  • 西暦年が4で割り切れる年はうるう年
  • ただし、西暦年が100で割り切れる年は平年
  • ただし、西暦年が400で割り切れる年はうるう年

制約

  • 1≦N≦100000000=108

入力

入力は以下の形式で標準入力から与えられる。

N

出力

うるう年なら Yes うるう年でなければNoを出力してください。


入力例 1

2017

出力例 1

No

入力例 2

2020

出力例 2

Yes

解答例

import java.util.Scanner;

public class Sample1 {

    public static void main(String[] args) {

        Scanner sc = new Scanner (System. in);
        int year = sc. nextInt();

        if ((year%4==0 && year % 100 !=0) ||  year % 400 == 0){
            System. out. println ("Yes");
        }else{
            System. out. println ("No");
        }
        sc.close();
    }

}
問題2

問題文

兄と弟から成る2人の兄弟がいました。正の整数Nが与えられる。

  • 兄は与えられた整数をA倍する。その後、整数を弟に渡す。
  • 弟は受け取った整数からBを引いたとき0以下にならないのであればBを引くが、0以下になるなら何もしない。最終的に弟が持っている整数は正の整数Cであった。A、B、Cが与えられるのでありうる最初のNを昇順に全て列挙せよ。ありうるNがひとつも無い場合は-1を出力せよ。

制約

  • 1≦A, B, C≦100000=105

入力

入力は以下の形式で標準入力から与えられる。

A B C

出力

答えを出力。答えが複数ある場合は複数行で出力してください。各行は最後に改行すること。


入力例 1

1 1 1

出力例 1

1
2

N=1の時、兄が1倍して弟に渡す。弟は1を引くと0になるので何もしない。C=1になる。
N=2の時、兄が1倍して弟に渡す。弟は2から1を引く。C=1になる。
C=1になるのはこの2通りだけである。


入力例 2

3 1 1

出力例 2

-1

解答例

import java.util.Scanner;
import java.util.TreeSet;

public class Sample2 {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        long a = sc.nextInt();
        long b = sc.nextInt();
        long c = sc.nextInt();
        TreeSet<Long> ans = new TreeSet<>();
        if (c <= b) {
            if (c % a == 0) {
                ans.add(c / a);
            }
        }
        if ((c + b) % a == 0) {
            ans.add((c + b) / a);
        }
        if (ans.size() == 0) {
            System.out.println(-1);
        } else {
            for (long x : ans) {
                System.out.println(x);
            }
        }
        sc.close();
    }

}

今回の演習問題

問題1

問題文

数字だけの文字列Sが与えられるので、その数字を全て足してください。

制約

  • 1≦|S|≦100000=105

入力

入力は以下の形式で標準入力から与えられる。

S

出力

キャンディーを同じ個数に分けられるなら Yes を、そうでなければ No を出力せよ。


入力例 1

123

出力例 1

6

入力例 2

01235

出力例 2

11

問題2

問題文

Mくんがショッピングサイトのアカウントを新規作成しようとしています。
ショッピングサイトのパスワードには半角英小文字と数字と記号のみ利用可能です。
登録できるのは、8 文字以上で半角英小文字と数字と記号をそれぞれ 1 文字以上含むパスワードです。
Mくんはいつもパスワードに利用している半角英小文字からなる 8 文字の文字列 S があります。
Mくんは S の文字のいくつかを以下のように置き換えて登録する方法を思いつきました。

  • lを数字の1に置き換える
  • oを数字の0に置き換える
  • aを記号の@に置き換える
  • sを記号の$に置き換える

置き換えにはいくつかのパターンがありますが、そのうちショッピングサイトに登録可能なパターンはいくつあるか答えてください。

制約

  • S∣=8
  • S は英小文字のみからなる

入力

入力は以下の形式で標準入力から与えられる。

S

出力

ショッピングサイトに登録可能な置き換えパターンの数を出力してください。


入力例 1

password

出力例 1

7

登録可能なのは、pas$w0rdpa$sw0rdpa$$w0rdp@ssw0rdp@s$w0rdp@$sw0rdp@$$w0rdの 7 パターンです。


入力例 2

assassin

出力例 2

0

いくつかの置き換えパターンがありますが、数字を含むパターンはありません。


入力例 3

sayhello

出力例 3

21

コメント