ブルーブリッジカップブラシ問題記録(1)

32874 ワード

文書ディレクトリ

  • 1004:雌牛の物語
  • ふるい法で求めるN内の素数
  • 文字列の入出力処理
  • 回文数字
  • キャンディ
  • 1004:雌牛の物語


    テーマには雌牛が描かれており、毎年年初めに小さな雌牛が生まれた.子牛は4年目から毎年年初にも子牛を産む.プログラミングして実現してn年目の時、何頭の雌牛がありますか?入力入力データは複数のテストインスタンスからなり、各テストインスタンスは1行を占め、1つの整数n(0 n=0は入力データの終了を表し、処理しない.出力は各テストインスタンスについて、n年目の雌牛の数を出力する.各出力は1行を占める.サンプル入力
    2
    4
    5
    0
    

    サンプル出力
    2
    4
    6
    

    結題構想変種ウサギ問題コード
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		int n = scanner.nextInt();
    		int[] cows = new int[55];
    		cows[1] = 1;
    		cows[2] = 2;
    		cows[3] = 3;  // 
    		while (n != 0) {
    			for (int i = 4; i <= n; i++) {
    				cows[i] = cows[i - 3] + cows[i - 1]; // 
    			}
    			System.out.println(cows[n]);
    			n = scanner.nextInt();
    		}
    	}
    }
    

    ふるい法で求めるN内の素数


    題目はふるい法で求めたN内の素数を記述する.入力N出力0~Nの素数サンプル入力
     100
    

    サンプル出力
    2
    3
    5
    7
    11
    13
    17
    19
    23
    29
    31
    37
    41
    43
    47
    53
    59
    61
    67
    71
    73
    79
    83
    89
    97
    

    結題構想ふるい法はiが2からNまで遍歴し,iが合数であればn*iはいずれも合数(2の倍数は必ず合数)コードである.
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] arg) {
    		Scanner sc = new Scanner(System.in);
    		int N = sc.nextInt();
    		boolean[] prime = new boolean[N + 1];
    		if (N >= 2)
    			System.out.println(2);
    		for (int i = 2; i <= N; i++) { // 
    			if (i % 2 != 0) {
    				int j = 0;
    				boolean flag = false;
    				double sq = Math.sqrt(i);
    				for (int k = 2; k <= sq; k++)
    					if (i % k == 0) {  // 
    						flag = true;
    						break;
    					}
    				if (!flag) {
    					System.out.println(i);
    				}
    			}
    		}
    	}
    }
    

    文字列の入出力処理


    タイトル記述文字列の入出力処理.入力の最初の行は正の整数Nで、最大は100です.その後、複数行の文字列(行数がNより大きい)が続き、各行の文字列には1000を超えないスペースが含まれる可能性があります.
    出力は、入力中の最初のN行の文字列(スペースを含む可能性がある)をそのまま出力し、残りの文字列(スペースを含まない)をスペースまたはリターン分割して行ごとに出力します.各行の出力の間に空の行が出力されます.
    サンプル入力
    2
    www.dotcpp.com DOTCPP
    A C M
    D O T CPP
    

    サンプル出力www.dotcpp.com DOTCPP
    A C M
    
    D
    
    O
    
    T
    
    CPP
    

    問題を解決する構想はStringを掌握する.spilt()コード
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String args[]) {
    		Scanner sc = new Scanner(System.in);
    		int a = sc.nextInt();
    		for (int i = 1; i <= a + 1; i++) {
    			String s = sc.nextLine();
    			if (i == 1)
    				continue;
    			System.out.println(s + "
    "
    ); } while (sc.hasNext()) { String s = sc.nextLine(); String x[] = s.split(" "); for (int i = 0; i < x.length; i++) { System.out.println(x[i] + "
    "
    ); } } } }

    回文数


    題目記述観察数字:12321123321には共通の特徴があり、左から右へ読んでも右から左へ読んでも同じである.このような数字を「回文数字」と言います.
    この問題では、5桁または6桁の10進数を見つける必要があります.この数字の各桁の和は、入力された整数に等しい.正の整数n(1044
    サンプル出力
    99899
    499994
    589985
    598895
    679976
    688886
    697796
    769967
    778877
    787787
    796697
    859958
    868868
    877778
    886688
    895598
    949949
    958859
    967769
    976679
    985589
    994499
    

    結題の構想はまず返事かどうかを判断し,その後入力値コードかどうかを判断する
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int number = sc.nextInt();
    		String string;
    		int count = 0;
    		boolean flag;
    		boolean result = false;
    		for (int i = 10001; i < 999999; i++) {
    			count = 0;
    			flag = true;
    			string = String.valueOf(i);
    			for (int j = 0; j < string.length(); j++) {
    				if (string.charAt(j) != string.charAt(string.length() - j - 1)) {
    					flag = false;
    					break;
    				}
    				count += Integer.parseInt(String.valueOf(string.charAt(j)));
    			}
    			if (count == number && flag) {
    				result = true;
    				System.out.println(i);
    			}
    		}
    		if (!result) {
    			System.out.println(-1);
    		}
    	}
    }
    

    菓子を配る


    問題の説明問題はn人の子供が囲んで座っていることを説明している.先生は子供たちにランダムに偶数個のキャンディを送って、次のゲームを行います.
    子供たちはみな自分のキャンディを半分に分けて左手の子供にあげた.
    一輪分糖後、奇数粒の糖を持つ子供は先生からキャンディを1つ補給し、偶数になる.
    すべての子供のキャンディの数が同じになるまで、このゲームを繰り返します.
    あなたの任務は既知の初期キャンディの状況で、先生が全部で何個のキャンディを補充する必要があるかを予測することです.入力プログラムはまず、子供の人数を表す整数N(23 2 2 4
    サンプル出力
    4
    

    左のクラスメートに半分注意するのは、最初のラウンドのキャンディの数の半分(右から半分も受け取っていない)のコードです.
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int number = sc.nextInt();
    		int[] children = new int[number];
    		for (int i = 0; i < children.length; i++) {
    			children[i] = sc.nextInt();
    		}
    		int[] old = children.clone();
    		int count = 0; //  
    		int give = 0;
    		boolean flag = true;
    		while (true) {
    			for (int i = 0; i < children.length; i++) {
    				children[i] = children[i] - old[i] / 2;
    				children[(i + number - 1) % number] += old[i] / 2;
    			}
    			for (int i = 0; i < children.length; i++) {
    				if (children[i] % 2 != 0) {
    					children[i] += 1;
    					count += 1;
    				}
    			}
    			old = children.clone();
    			for (int i = 1; i < children.length; i++) {
    				if (children[i] != children[0]) {
    					flag = false;
    					break;
    				}
    				if (i == number - 1) {
    					flag = true;
    				}
    			}
    			if (flag) {
    				System.out.println(count);
    				break;
    			}
    		}
    	}
    }