PAT周总结-11.06-11.10
1.java输入:Scanner;BufferedReader;
BufferedReader更省时间
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String str=sc.nextLine();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str=in.readLine();
}
}
2.将字符串转换成单个字符;
String类有个toCharArray()可以将String转化为char[]数组;
Strin分割为为string[]数组
String s1 = "String";
String s1 = "String 123 456 789";
for (int i=0;i<s1.length();i++){
char n=s1.charAt(i);//将字符串转换成单个字符
}
//String转化为char[]数组
char [] arr_a=s1.toCharArray();
//Strin分割为为string[]数组
String[] input = s2.split("\\s+");//将被除数A与除数B分开为两个字符串
3.int转为String;String转为int
int i=0;
String str="123456"
//int转为String
str=Integer.toString(i)
//String转为int
i=Integer.parseInt(str)
4.找素数
import static java.lang.StrictMath.sqrt;
for (int i = 2; i <=N ; i++) {
//重点:此处一定要将j的循环的范围缩小到根号下i的近似整数,否则运算时间太长,无法通过pat平台的的测试,如果没有运算时间限制,此处也可不缩小j的循环的范围。
int i_sqrt = (int)sqrt(i);
for (int j = 2; j <=i_sqrt ; j++) {
if (i%j==0){
//素数
break;
}
}
}
1007找素数对中发现:进行很简单的运算时,c++只需要5ms,而java需要90-100ms,而遇到很大的数据时,java与c++花费的时间又差不多。
5.整数数组升序排序
import java.util.Arrays;
public class testsort {
public static void main(String[] args) {
Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
Arrays.sort(a);
for(int arr:a) {
System.out.print(arr + " ");
}
//输出值为:0 1 2 3 4 5 6 7 8 9
}
}
6.整数数组降序排序
import java.util.Arrays;
import java.util.Collections;
public class testsort {
public static void main(String[] args) {
//这里不能用int类型 要用Integer类型
Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
Arrays.sort(a, Collections.reverseOrder());
for(int arr:a) {
System.out.print(arr + " ");
}
//输出值为:9 8 7 6 5 4 3 2 1
}
}
7.in.hasNext()判断是否有下一个输入
8.int取值区间
i n t 取 值 区 间 为 : [ − 2 31 , 2 31 ] int 取值区间为: [-2^{31},2^{31}] int取值区间为:[−231,231]
9.精确到小数点后1位
最简单:System.out.format("%.1f",pi);
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class test {
public static void main(String[] args) {
double pi = 1.23456789;
//直接用格式化输出 , f前的数字为精确到几位
//注意:格式化输出不换行
System.out.format("%.1f",pi);
System.out.println();
//使用DecimalFormat,精确到几位,要按后面的格式
//如果精确到小数点后5位的话,则为 "0.00000"
DecimalFormat df = new DecimalFormat("0.0");
System.out.println(df.format(pi));
//使用BigDecimal,注意:填入参数中的数字为:精确到几位然后加一的值
BigDecimal bd = new BigDecimal(pi,new MathContext(2, RoundingMode.HALF_UP));
System.out.println(bd);
}
}
10.冒泡排序:
public class maopao {
static int[] BubbleSort(int a[], int len)
{
for (int i = len-1; i >0 ; i--) {
for (int j = 0; j <i ; j++) {
if (a[j]>=a[j+1]){
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
return a;
}
public static void main(String[] arg){
int []a={1,5,8,6,9,10,15};
a= BubbleSort(a,6);
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}
}
}
11.快速排序:
public class quicksort {
public static int protition(int r[],int first,int end){
int i=first,j=end;
while (i<j){
while (i<j&&r[i]<=r[j]){
j--;
}
if (i<j){
int temp;
temp=r[i];
r[i]=r[j];
r[j]=temp;
i++;
}
while (i<j&&r[i]<=r[j]){
i++;
}
if (i<j){
int temp;
temp=r[i];
r[i]=r[j];
r[j]=temp;
i++;
}
}
return i;
}
public static int[] quicksort(int r[],int first,int end){
if (first<end){
int position=protition(r,first,end);
quicksort(r,first,position-1);
quicksort(r,position+1,end);
}
return r;
}
public static void main(String[] args) {
int []a={1,5,8,6,9,10,15};
a=quicksort(a,0,6);
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}
}
}