SDUT PTA JAVA12 常用类(日期、数学、封装类、随机数等)习题
7-7 无聊的小明来数1 (10 分)
import java.util.Calendar;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++) {
int k=sc.nextInt();
String cnt=Integer.toBinaryString(k);
int ans=0;
for(int j=0;j<cnt.length();j++) {
char ch=cnt.charAt(j);
if(ch=='1') ans++;
}
System.out.println(ans);
}
sc.close();
}
}
7-6 那年有几个黑五? (10 分)
import java.util.Calendar;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str=sc.nextLine();
int year=Integer.parseInt(str);
int sum=0;
Calendar ca= Calendar.getInstance();
for(int i=0;i<12;i++) {
ca.set(year,i,12);
if(ca.get(Calendar.DAY_OF_WEEK)==6) {
sum++;
}
}
System.out.println(sum);
sc.close();
}
}
7-5 jmu-Java-01入门-取数字浮点数 (10 分)
代码1
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String s=sc.nextLine();
int n=s.length();
char[] a=s.toCharArray();
int ans=0;
for(int i=0;i<n;i++) {
if(Character.isDigit(a[i])) {
//使用isDigit判断是否为数字
//使用isLetter判断是否为字母
ans+=a[i]-'0';
}
}
System.out.println(ans);
}
sc.close();
}
}
代码2
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String s=sc.nextLine();
int n=s.length();
char[] a=s.toCharArray();
int ans=0;
for(int i=0;i<n;i++) {
if('0'<=a[i]&&a[i]<='9') {
ans+=a[i]-'0';
}
}
System.out.println(ans);
}
sc.close();
}
}
7-4 jmu-java-随机数-使用蒙特卡罗法计算圆周率的值 (10 分)
背吧
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long seed=sc.nextLong();
int n=sc.nextInt();
Random R=new Random(seed);
int count=0;
for(int i=0;i<n;i++) {
double x=R.nextDouble()*2-1;
//生成[-1,1)区间的小数:
double y=R.nextDouble()*2-1;
//生成[-1,1)区间的小数:
if(Math.pow(x, 2)+Math.pow(y,2)<=1) {
count++;//统计落入圆内的次数
}
}
System.out.println(4*(double)count/n);
//count/n就是落入圆内的概率
//经过题目公式推导容易得4*(double)count/n)就是PI
sc.close();
}
}
7-3 伪随机数 (10 分)
import java.util.Random;
import java.util.Scanner;
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 R=new Random(k) ;
//使用种子 k 创建一个新的随机数生成器。
//你在创建一个Random对象的时候,给定任意一个合法的种子数,
//种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。
//对于种子相同的Random对象,生成的随机数序列是一样的。
int t=-1;
for(int i=0;i<n;i++) {
t=R.nextInt(m);
//生成[0,m)区间的整数:
//生成下一个伪随机数。
}
System.out.println(t);
sc.close();
}
}
(逐步逼近法)7-2 jmu-Java-01入门-开根号 (10 分)
NaN = not a number“不是一个合理的实数”
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
double n=sc.nextDouble();
double tmp=0;
if(n<0) {
System.out.println(Double.NaN);
}
else {
while(Math.pow(tmp, 2)<n&&Math.abs(n-tmp*tmp)>0.0001) {
tmp+=0.0001;
}
System.out.printf("%.6f\n",tmp);
}
}
sc.close();
}
}
7-1 sdut-常用类-骄傲的代价 (10 分)
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long t=sc.nextLong();
for(int i=0;i<t;i++) {
BigInteger a=sc.nextBigInteger();
BigInteger b=sc.nextBigInteger();
System.out.println(a+"+"+b+"="+a.add(b));
System.out.println(a+"-"+b+"="+a.subtract(b));
System.out.println(a+"*"+b+"="+a.multiply(b));
System.out.println(a+"/"+b+"="+a.divide(b));
System.out.println(a+"%"+b+"="+a.mod(b));
}
sc.close();
}
}