前言
java的基本语法,来自pta上面的题
一、根据输入的正整数y所代表的年份,计算输出该年份是否为闰年
闰年的判断标准:
能够被4整除且不能被100整除的年份
或者能够被400整除的年份
输入格式:
输入n取值范围是 【1..3000】
输出格式:
是闰年,输出 yes
非闰年,输出 no
输入样例:
在这里给出一组输入。例如:
100
输出样例:
在这里给出相应的输出。例如:
no
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int y = input.nextInt();
if((y%4 == 0 && y%100 != 0)||(y%400 ==0))
System.out.println("yes");
else
System.out.println("no");
}}
二、身体质量指数(BMI)测算(分数 10)
注意:该题只得了9分
体重是反映和衡量一个人健康状况的重要标志之一,过胖和过瘦都不利于健康,BMI(身体质量指数)计算方法:体重(以千克为单位)除以身高(以米为单位)的平方。中国成人正常的BMI应在18.5-24之间,如果小于18.5为体重不足,如果大于等于24为超重,大于等于28为肥胖。请编写程序,测算身体状态。
输入格式:
两个数值:体重(以千克为单位),身高(以米为单位),数值间以空格分隔。例如:65.5 1.75。
注意:体重的世界纪录是727公斤,身高的世界纪录是2.72米。输入数据上限不得超过纪录,下限不得小于等于0;
输出格式:
输入数值超出范围 :输出“input out of range”。例如:-2 3或者125 5。
BMI小于18.5 :输出“thin”。
BMI大于等于18.5小于24 :输出“fit”。
BMI大于等于24小于28 :输出“overweight”。
BMII大于等于28 :输出“fat”。
输入样例0:
在这里给出一组输入。例如:
-2 8
输出样例0:
在这里给出相应的输出。例如:
input out of range
输入样例1:
在这里给出一组输入。例如:
70 1.75
输出样例1:
在这里给出相应的输出。例如:
fit
import java.util.Scanner;
public class Main {
public static void main(String[] args){
double weigh,high,sum=0;
Scanner innext= new Scanner(System.in);
weigh=innext.nextDouble();
high=innext.nextDouble();
sum=(double)weigh/(high*high);
if((weigh > 727) || (weigh <=0) || (high>2.72) ||( high <= 0))
System.out.println("input out of range");
else if(sum>=18.5&&sum<=24)
System.out.println("fit");
else if(sum<18.5 && sum>0)
System.out.println("thin");
else if(sum>=24&&sum<28)
System.out.println("overweight");
else
System.out.println("fat");
}}
三 、点是否在圆内?(分数 10)
编写程序,提示用户输入一个点(x,y),然后检查这个点是否在以原点(0,0)为圆心、半径为10的圆内。
输入格式:
输入任意一个点的x轴和y轴坐标值,且两个值之间空格分隔。
输出格式:
若点在圆内,输出1,否则输出0。
输入样例:
4 5
输出样例:
1
import java.util.Scanner;
public class Main {
public static void main(String[] args){
int x,y;
Scanner s=new Scanner(System.in);
x=s.nextInt();
y=s.nextInt();
if(x*x+y*y < 100) //易错点,判断点是否在圆内,套用公式
System.out.println('1');
else
System.out.println('0');
s.close();
}}
四、字符串(分数 20)
对于输入字符串s(假设字符串只包含字母构成的单词和空格),完成如下功能:
- 统计该字符串中字母c出现的次数
- 求该字符串的逆
- 输出该字符串中子串str的所有位置(无需考虑子串叠加现象)
- 将字符串中每个单词的第一个字母变成大写并输出
输入格式:
字符串s
字母c
子串str
输出格式:
c在s中出现的次数
s的逆
str在s中的所有位置
所有单词首字母大写后的字符串
输入样例:
在这里给出一组输入。例如:
I scream you scream we all scream for icecream
m
eam
输出样例:
在这里给出相应的输出。例如:
4
maerceci rof maercs lla ew maercs uoy maercs I
5 16 30 43
I Scream You Scream We All Scream For Icecream
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String strc=sc.nextLine();//待输入字母,因为Java中没有直接读取单个字符的函数,
//所以将字母输入到字符串中,调用String中的charAt()函数
//取第一个字符即为我们想要输入的单个字符
char c=strc.charAt(0);
String str=sc.nextLine(); //输入要查找的子串
char []ns=s.toCharArray(); //将字符串放入到字符串数组中
int count=0;
// System.out.println(ns);
for (int i = 0; i < ns.length ; i++) {
if(ns[i]==c){
count++;
}
}
System.out.println(count);
for (int i = 0; i < ns.length/2 ; i++) { //求字符串的逆
char temp=ns[i];
ns[i]=ns[ns.length-i-1];
ns[ns.length-i-1]=temp;
}
System.out.println(ns);
int head=0;
int []arr=new int[s.length()];
String []nns=s.split(" ");//将句子中的各个单词分隔
int j=0;
int preStrLength=0;
while(true)
{
//indexOf——返回指定字符第一次出现的字符串内的索引
int n = s.indexOf(str);
//找不到返回-1,循环结束
if (n == -1) {
break;
}
//存储找到的值(下标)
//arr[j++]=n;
//第一次head=0,从0开始找,之后head变为下标n+要找字符串的长度
//应该从这里开始查找该子串,不加长度会出问题的!
//head = n + str.length();
if(j != 0)
System.out.print(' ');
//break;
System.out.print((n + preStrLength));//字符串位置
j++;
s= s.substring(n +str.length());//截取
preStrLength +=(n +str.length());
}
// System.out.print(arr[0]);
// for (int i = 1; i < j ; i++) {
// System.out.print(" " + arr[i]);
// }
System.out.println();
String s1=new String();
for (int i = 0; i < nns.length ; i++) {
if(i==nns.length-1) //toUpperCase()将字符串中的字母都变成大写字母,toLowerCase()反之
s1+=nns[i].substring(0,1).toUpperCase()+nns[i].substring(1);
else //最后一个单词无空格
s1+=nns[i].substring(0,1).toUpperCase()+nns[i].substring(1)+" ";
}
System.out.println(s1);
sc.close();
}
}
五、 房产税费计算2022(分数 12)
注意:运行正确,但是在pta才得10分
房屋交易在日常生活中非常常见的事情,房屋交易时要额外支付各种税费,按2022年房产交易新政策的规定买房人应缴纳税费包括:
1、契税:首次购房评估额90平(含)内1%、90平-144平(含)内1.5%,超过144平或非首 次3%,买方缴纳。
2、印花税:房款的0.05%。
3、交易费:3元/平方米。
4、测绘费:1.36元/平方米。
5、权属登记费及取证费:一般情况是在200元内。
输入格式:
四个数据,以空格分隔:
1、第几次购房(整数)
2、房款(整数/单位万元)
3、评估价(整数/单位万元)
4、房屋面积(浮点数/单位平方米)。
例如:1 100 100 90。
输出格式:
契税、印花税、交易费、测绘费(以元为单位),以空格分隔。例如:10000.0 500.0 270.0 122.4
输入样例:
在这里给出一组输入。例如:
1 100 100 90
输出样例:
在这里给出相应的输出。例如:
10000.0 500.0 270.0 122.4
import java.util.Scanner;
public class Main {
public static void main(String[] args){
int count,price,estimate;
double area,sum1=0,sum2=0,sum3=0,sum4=0;
Scanner input=new Scanner(System.in);
count=input.nextInt();
price=input.nextInt();
estimate=input.nextInt();
area=input.nextDouble();
sum2=price*0.0005*10000;
sum3=3*area;
sum4=1.36*area;
if(count == 1)
{
if(area <= 90)
{ sum1=estimate*0.01*10000;}
else if(area > 90 && area <= 144)
{ sum1=estimate*0.015*10000;}
else if(area > 144)
{ sum1=estimate*0.03*10000;}
}
else
sum1=estimate*0.03*10000;
System.out.println(sum1+" "+sum2+" "+sum3+" "+sum4);
input.close();
}
}
六、 画菱形(分数 10)
菱形是一种特殊的平行四边形,是四条边均相等的平行四边形。题目给出菱形的边长n,用*
画出菱形。如n=1,输出:
*
n=2,输出:
*
***
*
n=3,输出:
*
***
*****
***
*
那么,你能用程序来实现么?
输入格式:
输入菱形的边长n,1<n<100。
输出格式:
输出对应的用*
表示的菱形。
输入样例:
4
输出样例:
*
***
*****
*******
*****
***
*
题目分析: 找菱形规律
找空格、星号与行的关系,有题可知,有题可知,菱形边长为n时,可把菱形分为上三角和下三角。
上三角是n行,星号是2*n-1,设每一行是i,而星号前面的空格是n-i。下三角是n-1的倒三角,第一行为n-1,设每一行为i,空格是n-i,星号是2*i-1,类似倒置的上三角。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
int i,j,n,z,m;
Scanner input=new Scanner(System.in);
n=input.nextInt();
for(i=1;i<=n;i++) //菱形的上三角
{
for(j=1;j<=n-i;j++)
System.out.print(" ");
for(j=1;j<=2*i-1;j++)
System.out.print("*");
System.out.print("\n");
}
for(i=n-1;i>0;i--) //菱形的下三角
{
for(j=1;j<=n-i;j++)
{
System.out.print(" ");
}
for(m=1;m<=2*i-1;m++)
{
System.out.print("*");}
System.out.print("\n");
}
}
}
七、Java求乘积(分数 10)
注意:该题的答案运行正确,但在pta只得八分
编写一个Java应用程序,用户从键盘只能输入整数,以空格分隔(输入0代表结束输入),程序计算并输出这些整数的乘积。
输入格式:
从键盘只能输入不多于10个整数,以空格分隔(输入0代表结束输入)。整数的输入范围为【-1000-1000】
输出格式:
在一行中输出乘积的值。
输入样例:
在这里给出一组输入。例如:
2 3 8 0
输出样例:
在这里给出相应的输出。例如:
48
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner s= new Scanner(System.in);
int i=0,sum=1,k=0;
while(((i=s.nextInt()) != 0) && k<=10 ){
sum=i*sum;
k++;
}
System.out.println(sum);
}}
八、 学号识别(分数 10)
学校的学号由8位数字组成,前两位是入学年份(省略了20);第3、4位是学院编号,01代表材料学院,02代表机械学院,03代表外语学院,20代表软件学院;第5、6位是学院内部班级编号,最后两位是班级内部学号。如:18011103,入学年份是2018年,材料学院,11班,03号
输入格式:
8位数字组成的学号。例如:18011103
注意:输入学号不是8位或者学院编号不是01、02、03、20其中之一,属于非法输入
输出格式:
学号每一项的完整说明。例如:
入学年份:2018年
学院:材料学院
班级:11
学号:03
注意:如非法输入,输出“Wrong Format"
输入样例:
在这里给出一组输入。例如:
18011103
输出样例:
在这里给出相应的输出。例如:
入学年份:2018年
学院:材料学院
班级:11
学号:03
输入样例1:
在这里给出一组输入。例如:
18013
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner s= new Scanner(System.in);
String x = s.next();
int institute = Integer.parseInt(x.substring(2,4));//字符串转换为整型
if(((x.length()) != 8)||(institute != 01 && institute != 02 && institute != 03 && institute != 20))
{System.out.println("Wrong Format");
s.close();}
else
{
System.out.println("入学年份:"+"20"+ x.substring(0,2)+"年");
if(institute == 01)
System.out.println("学院:材料学院");
else if(institute == 02)
System.out.println("学院:机械学院");
else if(institute == 03)
System.out.println("学院:外语学院");
else if(institute == 20)
System.out.println("学院:软件学院");
System.out.println("班级:"+ x.substring(4,6));
System.out.println("学号:"+ x.substring(6,8));}
s.close();
}}
九、 定义完数方法(分数 10)
一个数如果恰好等于它的因子(除自身外)之和,这个数就称为"完数"。比如6=1+2+3,因此6是完数。在Main类里面定义一个方法 方法名为isPerfect 返回类型为boolean,该方法要求接收用户输入的一个整数,并判断该整数是否是完数,将判断结果返回,在main函数中 通过键盘输入这个整数,然后调用isPerfect判断这个整数判断是否是完数,如果是输出n:Yes,否则输出n:No ,n是这个具体的数,其中在main方法中调用方法的格式为 : boolean result = isPerfect(n);
输入格式:
从键盘输入一个整数
输出格式:
在显示器输出Yes 或者No
输入样例:
在这里给出一组输入。例如:
6
输出样例:
在这里给出相应的输出。例如:
6:Yes
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int n = s.nextInt();
String end ;
boolean result = isPerfect(n);
if(result)
end="Yes";
else
end="No";
System.out.println(n+":"+end);
s.close();
}
public static boolean isPerfect(int n)
{
int i,b=0;
for(i=1;i<n;i++)
{
if(n%i==0)
b=i+b;
}
if(n == b)
return true;
else
return false;
}
}
十、 判断一个点是否在园内(分数 10)
在Main类中编写方法,提示用户输入一个点(x,y),然后检查这个点是否在以原点(0,0)为圆心、半径为r的圆内。方法的首部定义为:
public boolean inCircle(int x,int y,int r);
方法在圆内,则返回true,否则返回false
在main方法中:
- 通过键盘输入点的x,y坐标以及圆的半价
- 调用inCircle方法,如果在圆内,输出yes,否则输出no
输入格式:
通过键盘入在一行中给出3整数,表示一个点坐标x,y,以及圆的半价
输出格式:
对每一组输入,在一行中输出yes或者no。
输入样例:
在这里给出一组输入。例如:
3 4 6
2 3 2
输出样例:
在这里给出相应的输出。例如:
yes
no
import java.util.Scanner;
public class Main {
public static void main(String[] args){
int x,y,r;
Scanner s = new Scanner(System.in);
x = s.nextInt();
y = s.nextInt();
r = s.nextInt();
boolean re = inCicle(x, y, r);
if(re)
System.out.println("yes");
else
System.out.println("no");
}
public static boolean inCicle(int x, int y,int r)
{
if(x*x + y*y < r*r)
return true;
else
return false;
}
}
总结
1.字符串的题比较复杂,关键是对String类的常有方法,可以搜此关键词,了解并运用
2.每个题都会有陷阱,秘诀就是仔细审题,尤其输出格式方面
3.类如菱形的题,突破口就是找规律