蓝桥杯刷题记录(1)

文章目录

    • 1004: 母牛的故事
    • 用筛法求之N内的素数
    • 字符串的输入输出处理
    • 回文数字
    • 分糖果

1004: 母牛的故事

题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0 n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入

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 + "\n");
		}
		while (sc.hasNext()) {
			String s = sc.nextLine();
			String x[] = s.split(" ");
			for (int i = 0; i < x.length; i++) {
				System.out.println(x[i] + "\n");
			}
		}
	}
}

回文数字

题目描述
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
输入
一个正整数 n (10< n< 100), 表示要求满足的数位和。
输出
若干行,每行包含一个满足要求的5位或6位整数。
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1
样例输入

44 

样例输出

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(2< N< 100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入

3 
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;
			}
		}
	}
}

你可能感兴趣的:(笔记)