总述:
输出时,连接a&c等样式时,需要用括号括起来构成整体, 字符串输入,char b=input.next().charAt(0); java输入范式:必须输入头文件 import java.util.Scanner; 调用时,先输入Scanner input=new Scanner(System.in) 通过使用System流来进行输入,同时使用Scanner进行定义input输入类型。 接下来进行整数或字符输入分别输入: int a=input.nextInt(); char b=input.next().charAt(0);
7-1 一批数中最大值最小值
从键盘输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时循环结束。。
输入格式:
在一行中输入若干个用空格间隔的整数(不要超过15个数),最后输入负数结束输入,数据之间只能用1个空格间隔。
输出格式:
在一行中按照“max=最高分,min=最低分”的格式输出结果,最高分和最低分均原样输出,没有列宽控制。
输入样例:
58 78 95 65 86 -1
输出样例:
max=95,min=58
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 M
思路:首先先把最大最小赋值为0,每输入一个数,与最大值相比,如果比最大值大,把它赋值给最大数。如果最小数为0,把他赋值给最小值。如果不为0,如果一个数小于最小值,把他赋值给最小值。最后输出
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
int max=0,min=0;
while(true){
int a=input.nextInt();
if(a<0)break;
if(min==0)min=a;
else{
if(max<a)max=a;
if(min>a)min=a;
}
}
System.out.println("max="+max+","+"min="+min);
}
}
注意:输入要加 import java.util.Scanner;
Scanner input=new Scanner (System.in);
int a=input.nextInt();
7-2 找出三位水仙花数
本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
输入格式:
输入在一行中给出两个正整数M和N(100≤M≤N≤999)。
输出格式:
顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。
如果M或者N不符合题目的要求,则输出Invalid Value.。
输入样例1:
100 400
输出样例1:
153
370
371
思路分析:水仙花数,重点是数位分离求和,各项分离三次方求和,判断与原来书是否相等
代码实现:
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
int a=input.nextInt();
int e=input.nextInt();
if(100<=a&&a<=e&&e<=999){
for(int i=a;i<=e;i++){
int b,c,d;
b=i%10;
c=i/10%10;
d=i/100;
if(b*b*b+c*c*c+d*d*d==i){
System.out.println(i);
}
}
}
else{
System.out.println("Invalid Value.");
}
}
}
7-3 求1!+2!+……+n!
求1!+2!+3!+……+n!,n<12,要求用一重循环设计程序。
输入格式:
输入一个小于12的正整数。
输出格式:
在一行中以“m=运算结果”顺序输出,其中运算结果是一个正整数,没有任何列宽控制。
输入样例:
5
输出样例:
m=153
思路分析:
通过循环使得一个数的阶乘得以实现,定义一个1的变量,乘等于i(这个数不断减一直到大于0),要实现各项相加,还得定义一个sum,放在各自阶乘外面,从而实现目标。
代码实现:
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
int a=input.nextInt();
int sum=0;
for(int i=a;i>0;i--){
int c=1;
for(int j=i;j>0;j--){
c*=j;
}
sum+=c;
}
System.out.println("m="+sum);
}
}
注意:
如果·采用for(int i=0;i<a;i++){while(i>0){c*=i;i--}}由于内外循环i一致,所以做完一次i为0,满足了外层循环结束条件,结束了循环,无法达到阶乘之和之效果。
7-4 逆序的三位数
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
思路分析:
数位分离,由于限制三位数,因此把分离出来的个十百分别乘以100.10.1实现数位的逆序,注意:先乘以相应权重再加。从而实现书的逆序。
代码实现:
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
int a=input.nextInt();
int sum=0;
int b,c,d;
b=a%10;//个位
c=a/10%10;//十
d=a/100;//百
int g=b*100+c*10+d;
System.out.println(g);
}
}
7-5 Java中二进制位运算
本题目要求读入2个整数和一个字符,然后根据这个字符值,对两个整数进行相应的二进制位的运算。要求必须使用switch选择结构。
(1)如果字符是&,则两个整数进行二进制位的与运算;
(2)如果字符是 |,则两个整数进行二进制位的或运算;
(3)如果字符是^,则两个整数进行二进制位异或运算;
(4)如果是其他字符,则固定输出信息:ERROR
输入格式:
在一行中依次输入整数1,字符,整数2。
输出格式:
类似3 & 4 = 0
其中,运算符号&的前后都有一个空格,等号的前后也都有一个空格。
上面表示3和4做二进制的与运算,结果是0。
输入样例:
3的二进制是0011,4的二进制是0100,二者与运算的结果是0。
3 & 4
输出样例:
注意&和=的前后,都是有且仅有一个空格。
3 & 4 = 0
输入样例:
7 X 3
输出样例:
ERROR
思路分析:
先判断是不是 "&""|""^",是的话就做相应位运算,位运算直接打即可,不要想太复杂。
不是输出ERROR,采用''较为更合适。
代码实现:
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
int a=input.nextInt();
char b=input.next().charAt(0);
int c=input.nextInt();
switch(b){
case '&':System.out.println(a+" "+'&'+" "+c+" "+"="+" "+(a&c));break;
case '|':System.out.println(a+" "+'|'+" "+c+" "+"="+" "+(a|c));break;
case '^':System.out.println(a+" "+'^'+" "+c+" "+"="+" "+(a^c));break;
default: System.out.println("ERROR");
}
}
}
/*注意:输出时,连接a&c等样式时,需要用括号括起来构成整体,
字符串输入,char b=input.next().charAt(0);
java输入范式:必须输入头文件 import java.util.Scanner;
调用时,先输入Scanner input=new Scanner(System.in)
通过使用System流来进行输入,同时使用Scanner进行定义input输入类型。
接下来进行整数或字符输入分别输入:
int a=input.nextInt();
char b=input.next().charAt(0);*/
7-6 计算火车运行时间
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
输入样例:
1201 1530
输出样例:
03:29
思路分析:
本题两个点,就是时间是60一小时,而在十位制里,一个是差100,因此难度在于差的40里,其他的话直接减去,输出即可。由于本题涉及时间的输出,因此采用C语言printf较为方便快捷。
本题关键就在于时间之间差值与百位之间差值不同,相差40, 因此判断需不需要进行减去40主要看A的百十位与B的百十位哪个大, 如果B大直接减输出C/100前两位,C%100后两位。如果A大,前两位不变,后两位输出再减去40后的结果即可。
代码实现:
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
int a=input.nextInt();
int b=input.nextInt();
int c=b-a;
if((a%100)>(b%100))System.out.printf("%02d:%02d",c/100,c%100-40);
else System.out.printf("%02d:%02d",c/100,c%100);
}
}
/**/本题关键就在于时间之间差值与百位之间差值不同,相差40,
因此判断需不需要进行减去40主要看A的百十位与B的百十位哪个大,
如果B大直接减输出C/100前两位,C%100后两位。如果A大,前两位不变,后两位输出再减去40后的结果即可。
7-7 掉入陷阱的数字
对任意一个自然数N0,先将其各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数N1;然后对N1重复这种操作,可以产生新自然数N2;……多次重复这种操作,运算结果最终会得到一个固定不变的数Nk,就像掉入一个数字“陷阱”。
本题要求对输入的自然数,给出其掉入“陷阱”的过程。
输入格式:
在一行内给出一个自然数N0(N0<30000)。
输出格式:
对于输入的N0,逐行输出其掉入陷阱的步骤。第i行描述N掉入陷阱的第i步,格式为: i:Ni (i≥1)。当某一步得到的自然数结果Nk(k≥1)与上一步Nk−1相同时,停止输出。
输入样例:
5
输出样例:
1:16
2:22
3:13
4:13
思路分析:
数位分离,乘3+1.。得出来结果和上次结果相同即结束。
主要问题在于a作为数位分离的对象,他在分离完之后无法满足条件,而是要把算出的SUM进行分离,因此左后要把sum赋值给a,同时在前面要借助一个临时变量存放前一个的SUM值,在新SUM算出来后进行if比较,如果相同就System.out.println,加break;不同也要System.out.println。
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
int a=input.nextInt();
int cnt=0;//定义计数器表示次数
while(true){
cnt++;
int sum=0;
int d=a;
while(a>0){
sum+=a%10;//各项乘3
a/=10;
}
sum=sum*3+1;//之和加1
if(d==sum){
System.out.println(cnt+":"+sum);//先输出,让读者觉得两个相同不继续了
break;
}
System.out.println(cnt+":"+sum);//先输出,让读者觉得两个相同不继续了
a=sum;//把上一个sum保存至b和i中,使得i满足循环条件接着做while循环。
}
}
}
//通过最后a=sum,实现满足永真循环条件,再在前面定义d=a,根据后面算出的sum比较来进行中断或是持续。
总结:
JAVA初学者在于回顾C的思维同时掌握JAVA的输入语句:
import java.util.Scanner;
Scanner input=new Scanner(System.in);
int a=input.nextInt();
char c=input.next().charAt(0);
本文档包含一系列Java编程基础练习题目,如求最大最小值、水仙花数、阶乘求和、逆序数字、位运算、火车运行时间和数字陷阱等。每个题目提供输入输出格式、样例及解题思路,适合初学者巩固基础。

2232

被折叠的 条评论
为什么被折叠?



