题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数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
输出
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;
}
}
}
}