7-1 程序改错题1 (5分)
程序改错题。以下代码目标是实现从键盘输入1个整数x,然后根据x的值做不同的计算,输出结果。(程序有错,请改正后提交)
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int x, j = 1;
x = in.nextInt();
switch (x) {
case 1:
j++;
case 2:
j++;
case 3:
j = x*j++;
case 4:
j= x + j++;
case 5:
j = x - j++;
default:
j = x;
}
System.out.println(j);
}
}
输入格式:
输入整数x。
输出格式:
输出值。
输入样例:
5
输出样例:
4
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int x, j = 1;
x = in.nextInt();
switch (x) {
case 1:
j++;
break;
case 2:
j++;
break;
case 3:
j = x*j++;
break;
case 4:
j= x + j++;
break;
case 5:
j = x - j++;
break;
default:
j=x;
}
System.out.println(j);
}
}
7-2 jmu-java-01入门-基本输入 (10分)
对输入的若干行(每行以空格或者多个空格)数字字符串求和并输出。
输入格式:
每行包含两个数字字符串,中间以一个或者多个空格分隔。
输出格式:
输出两个数的和
输入样例:
1 1
2 3
-100 100
-100 -100
10 0
输出样例:
在这里给出相应的输出。例如:
2
5
0
-200
10
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
int a=scanner.nextInt();
int b=scanner.nextInt();
System.out.println(a+b);
}
}
}
7-3 写一个程序,输出你的姓名、年龄、所在学院、所在专业、所在班级。 (20分 )
写一个程序,输出你的姓名、年龄、所在学院、所在专业、所在班级。
输出样例:
姓名:张三
年龄:20
所在学院:计算机学院
所在专业:计算机科学与技术
所在班级:1班
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//System.out.println("name");
if(sc.hasNextLine()) {
//System.out.println("name");
String name=sc.next();
//System.out.println("age");
int age=sc.nextInt();
//System.out.println("compus");
String compus=sc.next();
//System.out.println("object");
String object=sc.next();
//System.out.println("class");
int classroom=sc.nextInt();
System.out.println("姓名:"+name+"\n" +
"年龄:"+age+"\n" +
"所在学院:"+compus+"\n" +
"所在专业:"+object+"\n"+
"所在班级:"+ classroom+"班" );
}else {
System.out.println("姓名:张三\n" +
"年龄:20\n" +
"所在学院:计算机学院\n" +
"所在专业:计算机科学与技术\n" +
"所在班级:1班" );
}
}
}
7-4 jmu-Java-02基本语法-05-浮点数的精确计算 (1分)
输入若干对浮点数,对每对浮点数输出其精确的和与乘积。
以下输入样例为两对浮点数输入,实际上有可能有不定对数的浮点数需要输入计算。
注1:直接使用double类型数据进行运算,无法得到精确值。
注2:输出时直接调用BigDecimal的toString方法。
输入样例:
69.1 0.02
1.99 2.01
输出样例:
69.12
1.382
4.00
3.9999
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
BigDecimal a,b;
while (scanner.hasNext()){
a = scanner.nextBigDecimal();
b = scanner.nextBigDecimal();
System.out.println(a.add(b));
System.out.println(a.multiply(b));
}
}
}
7-5 十进制转十六进制 (15分)
编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。
输入格式:
输入一个0~15之间的整数。
输出格式:
若输入的整数在0~15范围内,则输出对应的十六进制数。否则输出“Invalid input”。
输入样例:
11
输出样例:
B
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char m = 'A';
int n = scanner.nextInt();
if(n > 15) {
System.out.println("Invalid input");
}else if (n >= 10 && n <= 16){
System.out.println((char) (m+n-10));
}else {
System.out.println(n);
}
}
}
7-6 统计正数和负数的个数然后计算这些数的平均值 (15分)
编写程序,输入未指定个数的整数,判断读入的正数有多少个,读入的负数有多少个,然后计算这些输入值得总和及平均值(不对0计数)。当输入为0时,表明程序结束。将平均值以double型数据显示。
输入格式:
输入在一行中给出一系列整数,其间以空格分隔。当读到0时,表示输入结束,该数字不要处
输出格式:
在第一行中输出正整数的个数; 在第二行中输出负整数的个数; 在第三行中输出这些输入值的总和(不对0计数); 在第四行中输出这些输入值的平均值(double型数据)。
输入样例:
1 2 -1 3 0
输出样例:
3
1
5
1.25
import java.math.BigDecimal;
import java.util.Scanner;
/**
* 统计正负数
* @author Sakura
*
*/
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
int a=sc.nextInt();
int positive=0;
int negative=0;
int sum=0;
if(a==0) {
return;
}
while(a!=0) {
if(a>=0) {
positive++;
}else {
negative++;
}
sum+=a;
a=sc.nextInt();
}
System.out.println(positive);
System.out.println(negative);
System.out.println(sum);
if(positive+negative==0) {
System.out.println(sum*1.0);
}else {
System.out.println(sum*1.0/(positive+negative));
}
}
}
7-7 666 (10分)
中国人非常喜欢6这个数字,因为大家总爱说66大顺啊。数学狂人李某人喜欢把什么都数字化,于是她把顺利这个词也定义了数量级,6代表1级顺利,66代表2级顺利,666代表3级顺利,以此类推。你看,数学狂人的世界总是让人无法理解。今天,李某人决定将数学进行到底,现在她设前n级顺利的和是sn。
sn=6+66+666+…+66…66(n个6)。
假设你已经知道了数字n,那么,你能帮李某人求出sn么?
输入格式:
输入一个正整数n,n的范围是[0,10)。
输出格式:
输出Sn的值。
输入样例:
2
输出样例:
72
import java.math.BigDecimal;
import java.util.Scanner;
/**
* 666
* @author Sakura
*
*/
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
int n=sc.nextInt();
int sum=0;
int sum1=0;
for(int i=1;i<=n;i++) {
sum=sum*10+6;
sum1=sum1+sum;
}
System.out.println(sum1);
}
}
7-8 又来一个上三角数字三角形 (10分)
输入一个正整数n,输出具有n层的上三角数字三角形。
输入格式:
只有一个正整数n,1<=n<=100。
输出格式:
一个上三角数字三角形,每个数字占四个字符位置。
输入样例:
5
输出样例:
1 6 10 13 15
2 7 11 14
3 8 12
4 9
5
import java.util.Scanner;
/**
* 打印数字三角形
* @author Sakura
*
*/
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int [][] a=new int [100][100];
int n=sc.nextInt();
int number=0;
for(int i=0;i<n;i++){ //代表列数
int j=0;
for(int k=0;k<n-i;k++){ //代表每列的个数
a[j][i]=++number;
j++; //代表行数
}
}
//打印
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]!=0){
System.out.printf("%4d",a[i][j]);
}
}
System.out.println();
}
}
}
7-9 IP地址转换 (30分)
一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
输入格式:
输入在一行中给出32位二进制字符串。
输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:
在这里给出一组输入。例如:
11001100100101000001010101110010
输出样例:
在这里给出相应的输出。例如:
204.148.21.114
import java.util.Scanner;
/**
* IP地址转换
* @author Sakura
*
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String c=sc.nextLine();
char [] a = c.toCharArray();
int l=0;
for(int j=0;j<4;j++){
double temp=0,sum=0;
for(int k=7;k>=0;k--){
temp=(a[l]-'0')*Math.pow(2,k);
sum+=temp;
l++;
}
System.out.print((int)sum);
if(j!=3)
System.out.print(".");
}
}
}
7-10 369寝室 (10分)
369寝室是比较特殊的寝室,因为别的寝室都住了四个人,而369寝室只有三个人。也因为这个原因,寝室里的三位同学感情特别好。但是,毕业在即,三位小伙伴马上要分别。为了在未来的某个日子可以见面,三位小伙伴有了一个约定,假设在未来的某一年,三位小伙伴的年龄的末尾正好出现3、6、9三个数,那么他们会再次相聚。
现在问题来了,假设今年三位小伙伴的年龄分别是x,y,z,那么,他们三人最早几年后可以相聚呢?
输入格式:
输入数据包括三个整数x,y,z,分别表示三位伙伴的年龄。
输出格式:
如果小伙伴最早在n年后可以相见(不包括当前这一年),那么请输出这个n;如果100年内都不存在这样的情况,输出:so sad!
输入样例:
25 22 28
输出样例:
1
import java.math.BigDecimal;
import java.util.Scanner;
/**
* 统计正负数
* @author Sakura
*
*/
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
int i;
for( i=0;i<100;i++) {
if((a%10==b%10)||(b%10==c%10)||(a%10==c%10)) { //要保证三个人的年龄均不同
System.out.println("so sad!");
break;
}else if((a%10==3||a%10==6||a%10==9)&&(b%10==3||b%10==6||b%10==9)&&(c%10==3||c%10==6||c%10==9)) {
if(i!=0){
System.out.println(i);
break;
}
}
a++;
b++;
c++;
}
if(i>=100) {
System.out.println("so sad!");
}
}
}
7-1 使用公历类GregorianCalendar (10分)
使用公历类 GregorianCalendar,公历类 GregorianCalendar有方法setTimeInMillis(long);可以用它来设置从1970年1月1日算起的一个特定时间。请编程从键盘输入一个长整型的值,然后输出对应的年、月和日。例如输入:1234567898765,输出:2009-1-14
输入格式:
输入
1234567898765 (毫秒数)
输出格式:
输出
2009-1-14 (输出年、月和日,实际应该是2月,因为Java API 从0开始计算月份)
输入样例:
1450921070108
输出样例:
2015-11-24
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Main{
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
Calendar c=new GregorianCalendar();
long s=sc.nextLong();
c.setTimeInMillis(s);
System.out.println(c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH)+'-'+c.get(Calendar.DATE));
}
}
7-2 jmu-Java-01入门-取数字浮点数 (2分)
本题目要求读入若干以回车结束的字符串表示的整数或者浮点数,然后将每个数中的所有数字全部加总求和。
输入格式:
每行一个整数或者浮点数。保证在浮点数范围内。
输出格式:
整数或者浮点数中的数字之和。题目保证和在整型范围内。
输入样例:
-123.01
234
输出样例:
7
9
import java.util.Scanner;
public class Main{
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int sum=0;
String str=sc.nextLine();
for(int i=0;i<str.length();i++) {
if(str.charAt(i)>='0'&&str.charAt(i)<='9') {
sum+=str.charAt(i)-'0';
}
}
System.out.println(sum);
}
}
}
7-3 jmu-Java-02基本语法-03-身份证排序 (4分)
- 输入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
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String id[] = new String[n];
String birth[] = new String[n];
sc.nextLine();
for(int i = 0; i < n; i ++)
id[i] = sc.nextLine();
String t = sc.nextLine();
while(true)
{
if(t.equals("sort1"))
{
for(int i = 0; i < n; i ++)
birth[i] = id[i].substring(6, 10) + "-" + id[i].substring(10, 12) + "-" + id[i].substring(12, 14);
Arrays.sort(birth);
for(int i = 0; i < n; i ++)
System.out.println(birth[i].toString());
}else if(t.equals("sort2")) {
for(int i = 0; i < n; i ++)
birth[i] = id[i].substring(6, 14);
Arrays.sort(birth);
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j++)
if(id[j].contains(birth[i])) System.out.println(id[j].toString());
}else if(t.equals("e")) {
System.out.println("exit");
sc.close();
break;
}
t = sc.nextLine();
}
}
}
7-4 伪随机数 (10分)
在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long。Random的对象有两种构建方式:带种子和不带种子。不带种子的方式将会返回随机的数字,每次运行结果不一样。无论程序运行多少次,带种子方式构建的Random对象会返回一样的结果。
请编写程序,使用第一种方式构建Random对象,并完成下面输入输出要求。
输入格式:
在一行中输入3个不超过10000的正整数n,m,k。
输出格式:
在一行中输出以k为种子建立的Random对象产生的第n个0到m-1之间的伪随机数。
输入样例:
10 100 1000
输出样例:
50
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int k=sc.nextInt();
Random a=new Random(k);
for(int i=0;i<n-1;i++) {
a.nextInt(m);
}
System.out.println(a.nextInt(m));
}
}
7-5 jmu-Java-01入门-格式化输入输出与字符串 (15分)
本题主要考察
• 使用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
import java.util.*;
public class Main {
public static void main(String[] args) {
String a;
Scanner sc = new Scanner(System.in);
while (true) {
a = sc.nextLine();
if (a.equals("double")) {
double b1 = sc.nextDouble();
double b2 = sc.nextDouble();
double b3 = sc.nextDouble();
System.out.printf("choice=%s\n", a);
System.out.printf("%-5.2f,%5.2f,%.2f\n", b1, b2, b3);
sc.nextLine();
} else if (a.equals("int")) {
int sum = 0;
for (int i = 0; i < 3; i++)
sum += sc.nextInt();
System.out.printf("choice=%s\n", a);
System.out.printf("%d\n", sum);
sc.nextLine();
} else if (a.equals("str")) {
String str;
str = sc.next();
str = sc.next() + str;
str = sc.next() + str;
System.out.printf("choice=%s\n", a);
System.out.println(str);
sc.nextLine();
} else if (a.equals("line")) {
String str = sc.nextLine();
str = str.toUpperCase();
System.out.printf("choice=%s\n", a);
System.out.println(str);
} else {
System.out.printf("choice=%s\n", a);
System.out.println("other");
}
}
}
}
7-6 校园竞赛-十位评委 (10分)
题目要求:
我们学院经常组织各项技能比赛,例如电脑文化节中Flash作品比赛,台下有10位评委来评判参赛者的作品,评委打分:0-100分的整数,参赛者最终得分是去掉一个最高分,去掉一个最低分,所剩分数的平均分。
要求设计一个软件,可以连续输入10位评委的成绩,并且可以无限次计算参赛者的成绩(提示,不退出即可继续输入下一批成绩)
输入格式:
90 100 80 70 65 86 77 89 91 73
输出格式:
100 65 82
输入样例:
在这里给出一组输入。例如:
90
100
80
70
65
86
77
89
91
73
输出样例:
在这里给出相应的输出。例如:
100 65
82
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (true) {
int [] a = new int[10];
for(int i = 0;i<10;i++) {
a[i]=in.nextInt();
}
m(a);
}
}
public static void m(int[ ] a) {
int max = a[0];
int min = a[0];
int sum = 0;
for(int i = 0;i<10;i++) {
if(a[i]>max) {
max = a[i];
}
if(a[i]<min) {
min = a[i];
}
sum+=a[i];
}
System.out.println(max+" "+min);
System.out.println((sum-max-min)/8);
}
}
7-7 通过键盘输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 (10分)
统计一行字符串中的英文字母个数、空格个数、数字个数、其他字符个数
输入格式:
通过键盘输入一行字符(任意字符)
输出格式:
统计一行字符串中的中英文字母个数、空格个数、数字个数、其他字符个数
输入样例:
rwrwewre2345asdJSJQI%^&(& *&sdf YY( 2342-k’
输出样例:
字母个数:22
数字个数:8
空格个数:5
其他字符个数:10
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str=sc.nextLine();
int num=0,character=0,space=0,other=0;
for(int i=0;i<str.length();i++) {
if(str.charAt(i)>='0'&&str.charAt(i)<='9') {
num++;
}else if((str.charAt(i)>='A'&&str.charAt(i)<'Z')||(str.charAt(i)>='a'&&str.charAt(i)<='z')){
character++;
}else if(str.charAt(i)==' ') {
space++;
}else {
other++;
}
}
System.out.printf("字母个数:%d\n",character);
System.out.printf("数字个数:%d\n",num);
System.out.printf("空格个数:%d\n",space);
System.out.printf("其他字符个数:%d\n",other);
}
}
7-8 数组元素交换 (10分)
数组元素交换,要求:(1)最大的元素与第一个元素交换(2)最小的元素与最后一个元素交换。
输入格式:
输入一行字符串(由不同的整数组成,以空格分开)
输出格式:
首先以数组形式输出初始字符串(一行一个数字),然后以数组形式输出完成交换后的字符串(一行一个数字)。
输入样例:
2 9 0 10
输出样例:
2
9
0
10
10
9
2
0
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String [] st = s.split("\\s+");
int[] a = new int[st.length];
for(int i=0;i<st.length;i++) {
a[i]=Integer.parseInt(st[i]);
}
int max=0;
int min=0;
int t;
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);
}
for(int i=0;i<a.length;i++) {
if(a[i]>a[max]) {
max=i;
}
if(a[i]<a[min]) {
min=i;
}
}
t=a[0];
a[0]=a[max];
a[max]=t;
t=a[a.length -1];
a[a.length-1]=a[min];
a[min]=t;
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);
}
}
}