ラダーコンペティションのデイリーチェックイン01(1-6問題解決)

一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して10日目です。クリックしてイベントの詳細をご覧ください

序文

一般的に、ブルーブリッジカップは小さな打撃ではないので、今回は毎日チェックインを続け、毎日6問以上、PTAから順番に基礎トレーニングを開始します。初日にチェックイン

死ぬまでブラシ死ぬまでブラシ。ここでは、質問の難易度に応じて簡単な注文をします。

L1-001 Hello World(5分)

ここに画像の説明を挿入フォーマットに慣れる

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner Scanner = new Scanner(System.in);
        System.out.println("Hello World!");
    }
}
复制代码

L1-004摂氏温度を計算する(5ポイント)

ここに画像の説明を挿入

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int c = scanner.nextInt();
        c = 5*(c-32)/9;
        System.out.println("Celsius = "+c);
    }
}
复制代码

L1-003 1桁の統計(15ポイント)

ここに画像の説明を挿入

import java.util.Scanner;

public class Main {

    static int[] count;
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String InputString = scanner.next();
        count = new int[10];
        scanner.close();

        for (char c : InputString.toCharArray()) {
            count[c-'0']++;
        }
        for (int i = 0; i < count.length; i++) {
            if(count[i]!=0){
                System.out.println(i+":"+count[i]);
            }
        }

    }
}

复制代码

L1-005試験席番号(15点)

ここに画像の説明を挿入

注意点

このトピックは実際には非常に単純です。これは主に入力の最適化の問題です。スキャナーが機能しません。私にはそれを知る能力がありません。


import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;


/** Class for buffered reading int and double values */
class Reader {
    static BufferedReader reader;
    static StringTokenizer tokenizer;

    /**
     * call this method to initialize reader for InputStream
     */
    static void init(InputStream input) {
        reader = new BufferedReader(
                new InputStreamReader(input));
        tokenizer = new StringTokenizer("");
    }

    /**
     * get next word
     */
    static String next() throws IOException {
        while (!tokenizer.hasMoreTokens()) {
            //TODO add check for eof if necessary
            tokenizer = new StringTokenizer(
                    reader.readLine());
        }
        return tokenizer.nextToken();
    }

    static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    static double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }
}

public class Main {

    static Student[] Students;


    public static void main(String[] args) throws IOException {
        Reader.init(System.in);
        int N = Reader.nextInt();
        Students = new Student[N+1];
        for (int i = 0; i < N; i++) {

            Student student = new Student(Reader.next(),Reader.nextInt(),Reader.nextInt());
            Students[student.id_temp] = student;

        }


        int M = Reader.nextInt();
        for (int i = 0; i < M; i++) {

            find();
        }

    }

    public static void find() throws IOException {
        int id_temp = Reader.nextInt();
        Student student = Students[id_temp];

        System.out.println(student.id_stu+" "+student.id_set);
    }


    static class Student{
        String id_stu;
        int id_temp;
        int id_set;

        public Student(){}

        public Student(String id_stu, int id_temp, int id_set) {
            this.id_stu = id_stu;
            this.id_temp = id_temp;
            this.id_set = id_set;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "id_stu='" + id_stu + '\'' +
                    ", id_temp=" + id_temp +
                    ", id_set=" + id_set +
                    '}';
        }
    }
}

复制代码

L1-002印刷砂時計(20点)

ここに画像の説明を挿入

アイデア

実際、言うのも簡単です。主に、メインレイヤーには複数のレイヤーがあり、各レイヤーは規則的であることを知っておく必要があります。

この砂時計は等差数列であるため、d = 2であり、合計n(1+(n-1)* d +1)/ 2 = n^2/2となります。ただし、ここで入力するNは、2つの合計、つまり2つの同一のシーケンス-1の合計であることに注意してください。これは、最初のシーケンスが重複しているためです。

(多すぎても自動的に切り捨てられても構いません)

次に、各レイヤーにいくつかの要素があります。これも単純な等差数列です。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String ch = sc.next();

        int  h = (int) Math.sqrt((n+1)/2);// 计算高度

        for (int i = 0; i < h; i++)    //打印上半层沙漏
        {
            for (int j = 0; j < i; j++)
                System.out.print(" ");
            for (int j = 0; j < 2 * (h - i) - 1; j++)
                System.out.printf("%c", ch.toCharArray()[0]);
            System.out.println();

        }

        for (int i = 2; i <= h; i++)    //打印下半层沙漏
        {
            for (int j = 0; j < h - i; j++)
                System.out.print(" ");
            for (int j = 0; j < 2 * i - 1; j++)
                System.out.printf("%c", ch.toCharArray()[0]);
            System.out.print("\n");
        }
        System.out.printf("%d", n - 2 * h * h + 1);
    }
}


复制代码

L1-006連続係数(20ポイント)

ここに画像の説明を挿入このトピックは非常に良いですが、私は力ずくの解決策しか知りません

アイデア

または、暴力のアイデア、最初は除数を分解することです、ここでは2から始めます。次に、インクリメントしたいので、2が最初の除数なので、2、2、3、4、5、6の合計から合計= 1を推測して、これらの数値を乗算し始めました。sum <= nの場合にのみ、これらの要素の長さと最初の添え字を記録します。たとえば、上記のレコードは2から6です。小さいものから大きいものまで探しているので、最初に見つかった最小の長さではありません。ですから、楽しみにして次の3から始めなければなりません。

現時点では、除数を探しているので、最初にMath.sqrt(N)を使用して複雑さを軽減できます。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		long i = 0, j = 0;
		long len = 0, start = 0, sum = 0;
		long n;
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		for (i = 2; i < Math.sqrt(n); i++) {
			sum = 1;
			for (j = i; sum <= n; j++) {
			// j表示当前因子,i表示首因子,sum表示目前乘积,开始暴力枚举
				sum = sum * j;
				if (n % sum == 0 && j - i + 1 > len) {
					start = i;
					len = j - i + 1;
				}
			}
		}
		if (start == 0) {
			start = n;
			len = 1;
		}
		System.out.println(len);
		for (int k = 0; k < len - 1; k++) {
			System.out.print(start + k + "*");
		}
		System.out.println(start + len - 1);
	}
}

复制代码

最適化に関しては、3から列挙し続けることはできないため、KMPのアイデアで最適化できるはずだと思います。たとえば、630、最小値は4 5 6 7、連続値は5 6 7、つまり、最初は2 4 5 67で、2回目は2から6を記録します。34 567は5から6を記録します。 7で、3回目は4から始まります。だからこれについて考えてください。

おすすめ

転載: juejin.im/post/7084970288948969508