预备知识:Java基本语法、分支、循环、数组和字符串
7-1 累加器
请你实现一个累加器。输入n个非负整数,输出他们的和。 1<n<1000,而每个数则<10000。
输入格式:
输入包括两行。 第一行:包括一个整数n,表示总共有n个数。 第二行:包含n个整数。
输出格式:
输出n个数的和。
输入样例:
4
3 2 1 4
输出样例:
10
java
import java.util.Random;
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner cin = new Scanner(System.in);
int nums = cin.nextInt();
int res = 0;
for(int i=0;i<nums;i++){
int tmp = cin.nextInt();
res += tmp;
}
System.out.println(res);
}
}
7-2 我是升旗手
一年一度的升旗手选拔又要到了,学校要求每个班级选出一位同学做升旗手的候选人。因
为升旗手对身高有严格的要求,所以班主任决定选班级里个子最高的同学(如果两位同学
一样高,则选任意一位)。你能很快地给老师答案么?
输入格式:
输入包括两行。 第一行:包括一个整数n,表示班级里共有n位同学。 第二行:包含n个三位数,表示每一位同学的身高。
输出格式:
输出身高最高的同学的身高。
输入样例:
4
130 125 129 140
输出样例:
140
java
import java.util.Random;
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner cin = new Scanner(System.in);
int nums = cin.nextInt();
int res = -1;
for(int i=0;i<nums;i++){
int tmp = cin.nextInt();
res = Math.max(res,tmp);
}
System.out.println(res);
}
}
7-3 兔子繁殖问题
已知有一对兔子,每个月可以生一对兔子,而小兔子一个月后又可以生一对小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是说,兔子的对数为:第一个月1对,第二个月2对,第三个月3对,第四个月5对.....假设兔子的生育期为两年,且不死。那么问题来了,你能说出每个月的兔子数么?
输入格式:
输入一个数n,表示第n个月,1<=n<=24。
输出格式:
输出这个月兔子的数目。
输入样例:
4
输出样例:
5
java
import java.util.Random;
import java.util.Scanner;
//1 2 3 5
public class Main{
public static void main(String [] args){
Scanner cin = new Scanner(System.in);
int nums = cin.nextInt();
int tmp = 1;
int res = 1;
for(int i=1;i<nums;i++){
int tt = res;
res += tmp;
tmp = tt;
}
System.out.println(res);
}
}
7-4 作品评分
全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。
输入格式:
输入数据包括两行: 第一行为n,表示n个评委,n>2。
第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。
输出格式:
输出平均分,结果保留两位小数。
输入样例:
6
10 9 8 7.9 9 9.5
输出样例:
8.88
java
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
//1 2 3 5
public class Main{
public static void main(String [] args) throws IOException{
PrintWriter out = new PrintWriter(System.out);
StreamTokenizer in =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
Scanner cin = new Scanner(System.in);
in.nextToken();
int nums = (int)in.nval;
in.nextToken();
double sum = in.nval;
double mx = sum;
double mn = sum;
for(int i=1;i<nums;i++){
in.nextToken();
double tmp = in.nval;
if(tmp > mx){
mx = tmp;
}
if(tmp < mn){
mn = tmp;
}
sum += tmp;
}
sum -= mn;
sum -= mx;
double res = sum / (nums-2);
out.println(String.format("%.2f",res));
out.flush();
}
}
7-5 验证回文串
编写程序,验证一个字符串是否为回文串:是否从前读它和从后读它都是一样的。例如,mom,dad是回文串。该程序接收用户输入的字符串,判断是否为回文串,然后将判断的结果输出。
输入格式:
输入在一行中给出一个字符串。
输出格式:
如果输入的字符串为回文串,则输出yes;否则输出no。
输入样例:
在这里给出一组输入。例如:
mom
输出样例:
在这里给出相应的输出。例如:
yes
java
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
//1 2 3 5
public class Main{
static PrintWriter out = new PrintWriter(System.out);
static StreamTokenizer in =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static boolean judge(String s){
int len = s.length();
for(int i = 0; i < len/2; i++){
if(s.charAt(i) != s.charAt(len-i-1)){
return false;
}
}
return true;
}
public static void main(String [] args) throws IOException{
in.nextToken();
String s = in.sval;
if(judge(s)){
out.println("yes");
}
else{
out.println("no");
}
out.flush();
}
}
7-6 jmu-Java-01入门-格式化输入输出与字符串
###本题主要考察
- 使用
Scanner
处理输入 - 使用
System.out.printf
进行格式化输出 String
常用方法与字符串常用操作
main
###输入说明:
- 输入
double
,然后输入3个浮点数。输出: 从左到右依次输出3个double(均保留2位小数输出,宽度为5),**格式依次为:**右侧填充空格,左侧填充空格,直接输出 - 输入
int
,然后输入3个整数(以1个或多个空格分隔)。**输出:**将3个整数相加后输出。 - 输入
str
,然后输入3个字符串。**输出:**去除空格,然后倒序输出3个字符。 - 输入
line
,然后输入一行字符串。**输出:**转换成大写后输出。 - 如果输入不是上面几个关键词,输出:输出other。
###输出说明
choice=你输入选项
该选项对应的输出内容
###提示
- 可使用
line.split("\\s+");
将以1个或多个空格分隔开的字符串分割并放入字符串数组。 Scanner.nextLine
与Scanner的其他next函数混用有可能出错。
输入样例:
double
1.578 3.0 3.14259
line
aaaaaaaaaa
int
1 2 3
str
321 654 987
line
dddddddddd
end
输出样例:
choice=double
1.58 , 3.00,3.14
choice=line
AAAAAAAAAA
choice=int
6
choice=str
987654321
choice=line
DDDDDDDDDD
choice=end
other
这里要用到scanner.nextLine(),值得学习和注意
java
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
static PrintWriter out = new PrintWriter(System.out);
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static void solve() throws IOException{
Scanner cin = new Scanner(System.in);
while(true){
in.nextToken();
String op = in.sval;
if(op.equals("double")){
out.println("choice=double");
in.nextToken();
double n1=in.nval;
out.printf("%-5.2f",n1);
out.print(",");
in.nextToken();
double n2 = in.nval;
out.printf("%5.2f",n2);
out.printf(",");
in.nextToken();
double n3 = in.nval;
out.printf("%.2f",n3);
out.println();
}
else if(op.equals("int")){
out.println("choice=int");
in.nextToken();
int a = (int)in.nval;
in.nextToken();
int b = (int)in.nval;
in.nextToken();
int c = (int)in.nval;
out.println(a+b+c);
}
else if(op.equals("str")){
out.println("choice=str");
in.ordinaryChars('0','9');
in.wordChars('0','9');
in.nextToken();
String a = in.sval;
in.nextToken();
String b = in.sval;
in.nextToken();
String c = in.sval;
String res = c + b + a;
in.parseNumbers();
out.println(res);
}
else if(op.equals("line")){
out.println("choice=line");
String s = cin.nextLine();
s = s.toUpperCase();
out.println(s);
}
else{
out.printf("choice=%s%n",op);
out.println("other");
}
out.flush();
}
}
public static void main(String [] args) throws IOException{
solve();
}
}
7-7 结伴同行去秋游
可以去秋游啦!同学们别提多高兴了!老师说,单独行动有点危险,那么我们还是结伴同行吧。结伴的规则是这样的:排在最前的一个人和排在最后的那个人结成同伴,排在第2个的与排在倒数第2个的结成同伴......依次类推,2个一组成同伴。好,请马上排出来吧!老师语音一落,同学们"唰唰唰"很快结伴好了,准备出发喽!
输入格式:
第一行是一个整数n,表明n个同学。(2<=n<=50,n为偶数) 。
第二行n个整数表明n个同学的学号,学号之间有一个空格。
输出格式:
共n/2行,每行二个整数,表明结伴同学的学号,两个学号之间有一个空格。
输入样例:
6
5 6 4 12 3 2
输出样例:
5 2
6 3
4 12
java
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
static PrintWriter out = new PrintWriter(System.out);
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static Scanner cin = new Scanner(System.in);
static void solve() throws IOException{
int n;
n = cin.nextInt();
int[] a = new int[9999];
for(int i = 0 ; i < n ; i++ ){
a[i] = cin.nextInt();
}
for(int i=0;i<n/2;i++){
out.printf("%d %d%n",a[i],a[n-i-1]);
}
}
public static void main(String [] args) throws IOException{
solve();
out.flush();
}
}
7-8 摘苹果
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出很多苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知每个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式:
包括三行数据。
第一行是一个整数n,表示有n个苹果。苹果至少有一个,不超过1000个。
第二行包含n个100到200之间(包括100和200)的整数(以厘米为单位)分别表示这n个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。
第三行是一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式:
一个整数,表示陶陶能够摘到的苹果的数目。
输入样例:
10
100 200 150 140 129 134 167 198 200 111
110
输出样例:
5
java
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
static PrintWriter out = new PrintWriter(System.out);
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static Scanner cin = new Scanner(System.in);
static void solve() throws IOException{
int n;
n = cin.nextInt();
int[] a = new int[9999];
for(int i = 0 ; i < n ; i++ ){
a[i] = cin.nextInt();
}
int h = cin.nextInt();
int res = 0;
for(int i=0;i<n;i++){
if(a[i]<=h+30){
res++;
}
}
out.println(res);
}
public static void main(String [] args) throws IOException{
solve();
out.flush();
}
}
7-9 数组元素的删除
完成数组元素的移动功能:假设数组有n个元素,输入一个数x,把数组的第x个位置的元素删除了,后面的元素依次前进一个位置。
重复若干次这样的删除,得到最后的结果。
输入格式:
第一行包括一个整数n(1<=n<=100),表示数组元素的个数。
第二行输入n个数组元素,均为整数,用空格隔开。
第三行输入一个数k(1<=k<=100),表示要进行k次删除。
接下来k行,每行一个数x,表示要删除第x个元素。
输出格式:
输出经过k次删除后的数组,每两个元素之间用空格隔开。
输入样例:
10
1 2 3 4 5 6 7 8 9 10
4
3
2
4
6
输出样例:
1 4 5 7 8 10
java
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
static PrintWriter out = new PrintWriter(System.out);
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static Scanner cin = new Scanner(System.in);
static int[] a = new int[9999];
static int len;
static void fun(int id){
id--;
for(int i=id;i<len-1;i++){
a[i]=a[i+1];
}
len--;
}
static void solve() throws IOException{
len = cin.nextInt();
for(int i = 0 ; i < len ; i++ ){
a[i] = cin.nextInt();
}
int m = cin.nextInt();
for(int i=0;i<m;i++){
int id = cin.nextInt();
fun(id);
}
for(int i=0;i<len-1;i++){
out.print(a[i]+" ");
}
out.println(a[len-1]);
}
public static void main(String [] args) throws IOException{
solve();
out.flush();
}
}
7-10 jmu-Java-02基本语法-03-身份证排序
- 输入n,然后连续输入n个身份证号。
- 然后根据输入的是sort1 还是sort2 ,执行不同的功能。输入的不是sort1或sort2,则输出
exit
并退出。
输入sort1 ,将每个身份证的年月日抽取出来,按年-月-日 格式组装,然后对组装后的年-月-日 升序输出。
输入sort2,将所有身份证按照里面的年月日升序输出。
注意: 处理输入的时候,全部使用Scanner
的nextLine()
方法,以免出错。
输入样例:
6
410425198309308225
320203197206115011
431227196108033146
330226196605054190
34080019810819327X
320111197112301539
sort1
sort2
e
输出样例:
1961-08-03
1966-05-05
1971-12-30
1972-06-11
1981-08-19
1983-09-30
431227196108033146
330226196605054190
320111197112301539
320203197206115011
34080019810819327X
410425198309308225
exit
这里采用手动排序,其实也可以实例化Comparator实现自定义类的自定义排序
java
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;
class struct{
private String num;
private int id;
public struct(int id , String num){
this.id = id;
this.num = num;
}
public void setId(int id){
this.id = id;
}
public void setNum(String Num){
this.num = num;
}
public int getId(){
return this.id;
}
public String getNum(){
return this.num;
}
}
public class Main {
static PrintWriter out = new PrintWriter(System.out);
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static Scanner cin = new Scanner(System.in);
static String[] a = new String[9999];
static int len;
static struct[] sd = new struct[9999];
static void pre(){
for(int i=0;i<len;i++){
String y = a[i].substring(6,14);
sd[i] = new struct(i,y);
}
for(int i=0;i<len;i++){
for(int j=0;j<len-1;j++){
if(sd[j].getNum().compareTo(sd[j+1].getNum()) >= 1){
struct tmp = sd[j];
sd[j] = sd[j+1];
sd[j+1] = tmp;
}
}
}
}
static void sort1(){
for(int i=0;i<len;i++){
int id = sd[i].getId();
out.printf("%s-%s-%s%n",a[id].substring(6,10),a[id].substring(10,12),a[id].substring(12,14));
}
out.flush();
}
static void sort2(){
for(int i=0;i<len;i++){
int id = sd[i].getId();
out.println(a[id]);
}
out.flush();
}
static void solve() throws IOException{
len = cin.nextInt();
cin.nextLine();
for(int i = 0 ; i < len ; i++ ){
a[i] = cin.nextLine();
}
pre();
while(true){
String op = cin.nextLine();
if(op.equals("sort1")){
sort1();
}
else if(op.equals("sort2")){
sort2();
}
else{
out.println("exit");
break;
}
}
}
public static void main(String [] args) throws IOException{
solve();
out.flush();
}
}
7-11 jmu-java-m02-使用二维数组存储多元线性方程组
题面
可以使用二维数组存储来存储线性方程组的系数与常数。比如,对于如下3元线性方程组
3x+y+z=1
6x+2y+z=-1
-2x+2y+z=7
可以使用二位数组存储
2 1 1 1
6 2 1 -1
-2 2 1 7
编写一个程序可以存储n元线性方程组
输入格式:
整数n,代表n元
n行、每行n+1列线性方程组的系数与常数。系数与常数为double型。
输出格式:
格式化输出二维数组。注意:使用Arrays.deepToString进行格式化输出。
依次输出n行线性方程组的系数与常数。系数以 , 分隔,系数与常数之间以 = 分隔,= 之间有两个空格。
输入样例:
3
2 1 1 1
6 2 1 -1
-2 2 1 7
输出样例:
[[2.0, 1.0, 1.0, 1.0], [6.0, 2.0, 1.0, -1.0], [-2.0, 2.0, 1.0, 7.0]]
2.0, 1.0, 1.0 = 1.0
6.0, 2.0, 1.0 = -1.0
-2.0, 2.0, 1.0 = 7.0
java
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;
public class Main {
static PrintWriter out = new PrintWriter(System.out);
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static Scanner cin = new Scanner(System.in);
static double[][] arr;
static void solve() throws IOException{
int len = cin.nextInt();
arr = new double[len][len+1];
for(int i = 0 ; i < len ; i++ ){
for(int j=0;j<=len;j++){
arr[i][j]=cin.nextDouble();
}
}
String res = Arrays.deepToString(arr);
out.println(res);
for (int i = 0; i < len; i++) {
StringBuilder str = new StringBuilder();
for (int j = 0; j < len; j++) {
str.append(arr[i][j]).append(", ");
}
str.delete(str.length() - 2, str.length());
str.append(" = ").append(arr[i][len]);
out.println(str);
}
}
public static void main(String [] args) throws IOException{
solve();
out.flush();
}
}
7-12 sdut-array2-1-矩阵转置(I)
从键盘输入矩阵的行数N,和一个N×N阶的矩阵,编程输出它的转置矩阵。
输入格式:
首行为矩阵的行数(列数)N;
然后是N行N列组成矩阵的数据。每行内数据之间用空格隔开。
输出格式:
矩阵格式输出,每行内非尾部的每个数据后跟一个空格,行尾数据后不加空格,为换行符。
输入样例:
4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
输出样例:
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
java
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;
public class Main {
static PrintWriter out = new PrintWriter(System.out);
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static Scanner cin = new Scanner(System.in);
static int[][] arr;
static void solve() throws IOException{
int len = cin.nextInt();
arr = new int[len][len+1];
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
arr[i][j]=cin.nextInt();
}
}
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
out.print(arr[j][i]);
if(j!=len-1){
out.print(" ");
}
}
out.println();
}
}
public static void main(String [] args) throws IOException{
solve();
out.flush();
}
}