acm 算法 java_【经验总结】Java在ACM算法竞赛编程中易错点
一、Java之ACM易错点
1. 类名称必须采用public class Main方式命名
2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非常之垃圾
3. 有些OJ上的题目会直接将OI上的题目拷贝过来,所以即便是题目中有输入和输出文件,可能也不需要,因为在OJ系统中一般是采用标准输入输出,不需要文件
4. 在有多行数据输入的情况下,一般这样处理:
1 static Scanner in = newScanner(System.in);2 while(in.hasNextInt())3 或者是4 while(in.hasNext())
5. 有关System.nanoTime()函数的使用,该函数用来返回最准确的可用系统计时器的当前值,以毫微秒为单位。
longstartTime = System.nanoTime();
// ... the code being measured ...
longestimatedTime = System.nanoTime() - startTime;
二、Java之输入输出处理
由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题。
1. 输入:
格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in));
格式2:Scanner sc = new Scanner (System.in);
在读入数据量大的情况下,格式1的速度会快些。
读一个整数: int n =sc.nextInt(); 相当于scanf("%d", &n);或cin >> n;
读一个字符串:String s =sc.next(); 相当于 scanf("%s", s);或cin >> s;
读一个浮点数:double t =sc.nextDouble(); 相当于 scanf("%lf", &t);或cin >> t;
读一整行: String s = sc.nextLine();相当于gets(s);或cin.getline(...);
判断是否有下一个输入可以用sc.hasNext()或sc.hasNextInt()或sc.hasNextDouble()或sc.hasNextLine()
例1:读入整数
Input 输入数据有多组,每组占一行,由一个整数组成。
Sample Input
56
67
100
123
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc =newScanner(System.in);
while(sc.hasNext()){//判断是否结束
intscore = sc.nextInt();//读入整数
。。。。
}
}
}
例2:读入实数
输入数据有多组,每组占2行,第一行为一个整数N,指示第二行包含N个实数。
Sample Input
4
56.967.790.512.8
5
56.967.790.512.8
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc =newScanner(System.in);
while(sc.hasNext()){
intn = sc.nextInt();
for(inti=0;i
doublea = sc.nextDouble();
。。。。。。
}
}
}
}
例3:读入字符串【杭电2017 字符串统计】
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
Sample Input
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc = newScanner(System.in);
intn = sc.nextInt();
for(inti=0;i
String str = sc.next();
......
}
}
}
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc = newScanner(System.in);
intn = Integer.parseInt(sc.nextLine());
for(inti=0;i
String str = sc.nextLine();
......
}
}
}
例3:读入字符串【杭电2005 第几天?】
给定一个日期,输出这个日期是该年的第几天。
Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成
1985/1/20
2006/3/12
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc = newScanner(System.in);
int[] dd = {0,31,28,31,30,31,30,31,31,30,31,30,31};
while(sc.hasNext()){
intdays =0;
String str = sc.nextLine();
String[] date = str.split("/");
inty = Integer.parseInt(date[0]);
intm = Integer.parseInt(date[1]);
intd = Integer.parseInt(date[2]);
if((y%400==0|| (y%4==0&& y%100!=0)) && m>2) days ++;
days += d;
for(inti=0;i
days += dd[i];
}
System.out.println(days);
}
}
}
2. 输出
函数:
System.out.print();
System.out.println();
System.out.format();
System.out.printf();
例4杭电1170Balloon Comes!
Give you an operator (+,-,*, / --denoting addition, subtraction, multiplication, division respectively) and two positive integers, your task is to output the result.
Input
Input contains multiple test cases. The first line of the input is a single integer T (0
Output
For each case, print the operation result. The result should be rounded to 2 decimal places If and only if it is not an integer.
Sample Input
4
+ 1 2
- 1 2
* 1 2
/ 1 2
Sample Output
3
-1
2
0.50
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc =newScanner(System.in);
intn = sc.nextInt();
for(inti=0;i
String op = sc.next();
inta = sc.nextInt();
intb = sc.nextInt();
if(op.charAt(0)=='+'){
System.out.println(a+b);
}elseif(op.charAt(0)=='-'){
System.out.println(a-b);
}elseif(op.charAt(0)=='*'){
System.out.println(a*b);
}elseif(op.charAt(0)=='/'){
if(a % b ==0) System.out.println(a / b);
elseSystem.out.format("%.2f", (a / (1.0*b))). Println();
}
}
}
}
3. 规格化的输出:
函数:
// 这里0指一位数字,#指除0以外的数字(如果是0,则不显示),四舍五入.
DecimalFormat fd = new DecimalFormat("#.00#");
DecimalFormat gd = new DecimalFormat("0.000");
System.out.println("x =" + fd.format(x));
System.out.println("x =" + gd.format(x));
publicstaticvoidmain(String[] args) {
NumberFormat formatter = newDecimalFormat("000000");
String s = formatter.format(-1234.567);// -001235
System.out.println(s);
formatter = newDecimalFormat("##");
s = formatter.format(-1234.567);// -1235
System.out.println(s);
s = formatter.format(0);// 0
System.out.println(s);
formatter = newDecimalFormat("##00");
s = formatter.format(0);// 00
System.out.println(s);
formatter = newDecimalFormat(".00");
s = formatter.format(-.567);// -.57
System.out.println(s);
formatter = newDecimalFormat("0.00");
s = formatter.format(-.567);// -0.57
System.out.println(s);
formatter = newDecimalFormat("#.#");
s = formatter.format(-1234.567);// -1234.6
System.out.println(s);
formatter = newDecimalFormat("#.######");
s = formatter.format(-1234.567);// -1234.567
System.out.println(s);
formatter = newDecimalFormat(".######");
s = formatter.format(-1234.567);// -1234.567
System.out.println(s);
formatter = newDecimalFormat("#.000000");
s = formatter.format(-1234.567);// -1234.567000
System.out.println(s);
formatter = newDecimalFormat("#,###,###");
s = formatter.format(-1234.567);// -1,235
System.out.println(s);
s = formatter.format(-1234567.890);// -1,234,568
System.out.println(s);
// The ; symbol is used to specify an alternate pattern for negative values
formatter = newDecimalFormat("#;(#) ");
s = formatter.format(-1234.567);// (1235)
System.out.println(s);
// The ' symbol is used to quote literal symbols
formatter = newDecimalFormat(" '# '# ");
s = formatter.format(-1234.567);// -#1235
System.out.println(s);
formatter = newDecimalFormat(" 'abc '# ");
s = formatter.format(-1234.567);// - abc 1235
System.out.println(s);
formatter = newDecimalFormat("#.##%");
s = formatter.format(-12.5678987);
System.out.println(s);
}
4. 字符串处理 String
String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始:
String a = "Hello"; // a.charAt(1) = 'e'
用substring方法可得到子串,如上例
System.out.println(a.substring(0, 4)) // output "Hell"
注意第2个参数位置上的字符不包括进来。这样做使得s.substring(a, b)总是有b-a个字符。
字符串连接可以直接用 +号,如
String a = "Hello";
String b = "world";
System.out.println(a + ", " + b + "!"); // output "Hello, world!"
如想直接将字符串中的某字节改变,可以使用另外的StringBuffer类。
importjava.io.BufferedInputStream;
importjava.math.BigInteger;
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner cin = newScanner (newBufferedInputStream(System.in));
inta =123, b =456, c =7890;
BigInteger x, y, z, ans;
x = BigInteger.valueOf(a);
y = BigInteger.valueOf(b);
z = BigInteger.valueOf(c);
ans = x.add(y); System.out.println(ans);
ans = z.divide(y); System.out.println(ans);
ans = x.mod(z); System.out.println(ans);
if(ans.compareTo(x) ==0) System.out.println("1");
}
}
6. 进制转换
String st = Integer.toString(num, base); // 把num当做10进制的数转成base进制的st(base <= 35).
int num = Integer.parseInt(st, base); // 把st当做base进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).
BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制.
7. 数组排序
函数:Arrays.sort();
5. 高精度
BigInteger和BigDecimal可以说是acmer选择java的首要原因。
函数:add, subtract, divide, mod, compareTo等,其中加减乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之间的运算,所以需要把int(double)类型转换为BigInteger(BigDecimal),用函数BigInteger.valueOf().
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner cin = newScanner (newBufferedInputStream(System.in));
intn = cin.nextInt();
inta[] =newint[n];
for(inti =0; i
Arrays.sort(a);
for(inti =0; i
}
}
易错:
1.for(int i=m;i
2.m=m/10的值就变化了如果想要继续用m,应该提前保存
一、Java之ACM注意点
1. 类名称必须采用public class Main方式命名
2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非常之垃圾
3. 有些OJ上的题目会直接将OI上的题目拷贝过来,所以即便是题目中有输入和输出文件,可能也不需要,因为在OJ系统中一般是采用标准输入输出,不需要文件
4. 在有多行数据输入的情况下,一般这样处理,
staticScanner in =newScanner(System.in);
while(in.hasNextInt())
或者是
while(in.hasNext())
5. 有关System.nanoTime()函数的使用,该函数用来返回最准确的可用系统计时器的当前值,以毫微秒为单位。
longstartTime = System.nanoTime();
// ... the code being measured ...
longestimatedTime = System.nanoTime() - startTime;
二、Java之输入输出处理
由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题。
1. 输入:
格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in));
格式2:Scanner sc = new Scanner (System.in);
在读入数据量大的情况下,格式1的速度会快些。
读一个整数: int n =sc.nextInt(); 相当于scanf("%d", &n);或cin >> n;
读一个字符串:String s =sc.next(); 相当于 scanf("%s", s);或cin >> s;
读一个浮点数:double t =sc.nextDouble(); 相当于 scanf("%lf", &t);或cin >> t;
读一整行: String s = sc.nextLine();相当于gets(s);或cin.getline(...);
判断是否有下一个输入可以用sc.hasNext()或sc.hasNextInt()或sc.hasNextDouble()或sc.hasNextLine()
例1:读入整数
Input 输入数据有多组,每组占一行,由一个整数组成。
Sample Input
56
67
100
123
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc =newScanner(System.in);
while(sc.hasNext()){//判断是否结束
intscore = sc.nextInt();//读入整数
。。。。
}
}
}
例2:读入实数
输入数据有多组,每组占2行,第一行为一个整数N,指示第二行包含N个实数。
Sample Input
4
56.967.790.512.8
5
56.967.790.512.8
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc =newScanner(System.in);
while(sc.hasNext()){
intn = sc.nextInt();
for(inti=0;i
doublea = sc.nextDouble();
。。。。。。
}
}
}
}
例3:读入字符串【杭电2017 字符串统计】
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
Sample Input
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc = newScanner(System.in);
intn = sc.nextInt();
for(inti=0;i
String str = sc.next();
......
}
}
}
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc = newScanner(System.in);
intn = Integer.parseInt(sc.nextLine());
for(inti=0;i
String str = sc.nextLine();
......
}
}
}
例3:读入字符串【杭电2005 第几天?】
给定一个日期,输出这个日期是该年的第几天。
Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成
1985/1/20
2006/3/12
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc = newScanner(System.in);
int[] dd = {0,31,28,31,30,31,30,31,31,30,31,30,31};
while(sc.hasNext()){
intdays =0;
String str = sc.nextLine();
String[] date = str.split("/");
inty = Integer.parseInt(date[0]);
intm = Integer.parseInt(date[1]);
intd = Integer.parseInt(date[2]);
if((y%400==0|| (y%4==0&& y%100!=0)) && m>2) days ++;
days += d;
for(inti=0;i
days += dd[i];
}
System.out.println(days);
}
}
}
2. 输出
函数:
System.out.print();
System.out.println();
System.out.format();
System.out.printf();
例4杭电1170Balloon Comes!
Give you an operator (+,-,*, / --denoting addition, subtraction, multiplication, division respectively) and two positive integers, your task is to output the result.
Input
Input contains multiple test cases. The first line of the input is a single integer T (0
Output
For each case, print the operation result. The result should be rounded to 2 decimal places If and only if it is not an integer.
Sample Input
4
+ 1 2
- 1 2
* 1 2
/ 1 2
Sample Output
3
-1
2
0.50
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner sc =newScanner(System.in);
intn = sc.nextInt();
for(inti=0;i
String op = sc.next();
inta = sc.nextInt();
intb = sc.nextInt();
if(op.charAt(0)=='+'){
System.out.println(a+b);
}elseif(op.charAt(0)=='-'){
System.out.println(a-b);
}elseif(op.charAt(0)=='*'){
System.out.println(a*b);
}elseif(op.charAt(0)=='/'){
if(a % b ==0) System.out.println(a / b);
elseSystem.out.format("%.2f", (a / (1.0*b))). Println();
}
}
}
}
3. 规格化的输出:
函数:
// 这里0指一位数字,#指除0以外的数字(如果是0,则不显示),四舍五入.
DecimalFormat fd = new DecimalFormat("#.00#");
DecimalFormat gd = new DecimalFormat("0.000");
System.out.println("x =" + fd.format(x));
System.out.println("x =" + gd.format(x));
publicstaticvoidmain(String[] args) {
NumberFormat formatter = newDecimalFormat("000000");
String s = formatter.format(-1234.567);// -001235
System.out.println(s);
formatter = newDecimalFormat("##");
s = formatter.format(-1234.567);// -1235
System.out.println(s);
s = formatter.format(0);// 0
System.out.println(s);
formatter = newDecimalFormat("##00");
s = formatter.format(0);// 00
System.out.println(s);
formatter = newDecimalFormat(".00");
s = formatter.format(-.567);// -.57
System.out.println(s);
formatter = newDecimalFormat("0.00");
s = formatter.format(-.567);// -0.57
System.out.println(s);
formatter = newDecimalFormat("#.#");
s = formatter.format(-1234.567);// -1234.6
System.out.println(s);
formatter = newDecimalFormat("#.######");
s = formatter.format(-1234.567);// -1234.567
System.out.println(s);
formatter = newDecimalFormat(".######");
s = formatter.format(-1234.567);// -1234.567
System.out.println(s);
formatter = newDecimalFormat("#.000000");
s = formatter.format(-1234.567);// -1234.567000
System.out.println(s);
formatter = newDecimalFormat("#,###,###");
s = formatter.format(-1234.567);// -1,235
System.out.println(s);
s = formatter.format(-1234567.890);// -1,234,568
System.out.println(s);
// The ; symbol is used to specify an alternate pattern for negative values
formatter = newDecimalFormat("#;(#) ");
s = formatter.format(-1234.567);// (1235)
System.out.println(s);
// The ' symbol is used to quote literal symbols
formatter = newDecimalFormat(" '# '# ");
s = formatter.format(-1234.567);// -#1235
System.out.println(s);
formatter = newDecimalFormat(" 'abc '# ");
s = formatter.format(-1234.567);// - abc 1235
System.out.println(s);
formatter = newDecimalFormat("#.##%");
s = formatter.format(-12.5678987);
System.out.println(s);
}
4. 字符串处理 String
String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始:
String a = "Hello"; // a.charAt(1) = 'e'
用substring方法可得到子串,如上例
System.out.println(a.substring(0, 4)) // output "Hell"
注意第2个参数位置上的字符不包括进来。这样做使得s.substring(a, b)总是有b-a个字符。
字符串连接可以直接用 +号,如
String a = "Hello";
String b = "world";
System.out.println(a + ", " + b + "!"); // output "Hello, world!"
如想直接将字符串中的某字节改变,可以使用另外的StringBuffer类。
5. 高精度
BigInteger和BigDecimal可以说是acmer选择java的首要原因。
函数:add, subtract, divide, mod, compareTo等,其中加减乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之间的运算,所以需要把int(double)类型转换为BigInteger(BigDecimal),用函数BigInteger.valueOf().
importjava.io.BufferedInputStream;
importjava.math.BigInteger;
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner cin = newScanner (newBufferedInputStream(System.in));
inta =123, b =456, c =7890;
BigInteger x, y, z, ans;
x = BigInteger.valueOf(a);
y = BigInteger.valueOf(b);
z = BigInteger.valueOf(c);
ans = x.add(y); System.out.println(ans);
ans = z.divide(y); System.out.println(ans);
ans = x.mod(z); System.out.println(ans);
if(ans.compareTo(x) ==0) System.out.println("1");
}
}
6. 进制转换
String st = Integer.toString(num, base); // 把num当做10进制的数转成base进制的st(base <= 35).
int num = Integer.parseInt(st, base); // 把st当做base进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).
BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制.
7. 数组排序
函数:Arrays.sort();
publicclassMain {
publicstaticvoidmain(String[] args) {
Scanner cin = newScanner (newBufferedInputStream(System.in));
intn = cin.nextInt();
inta[] =newint[n];
for(inti =0; i
Arrays.sort(a);
for(inti =0; i
}
}
易错:
1.for(int i=m;i
2.m=m/10的值就变化了如果想要继续用m,应该提前保存
acm 算法 java_【经验总结】Java在ACM算法竞赛编程中易错点相关推荐
- java当中有关循环的代码_有关Java循环的内容,编程中还是比较常用的,下面分享给大家几个循环的示例代码,练习一下。1、循环输出1到100之间所有能被3或能被4整除的数。pack...
有关Java循环的内容,编程中还是比较常用的,下面分享给大家几个循环的示例代码,练习一下. 1.循环输出1到100之间所有能被3或能被4整除的数. package com.hz.loop02; /** ...
- java语言算法描述_六大java语言经典算法
在程序员们进行编程的时候,对各种数据的处理是少不了的,java语言算法在这个时候就十分重要了.数据算法有很多种,也并不区分哪种计算机语言使用,但是有程序员们常用的java语言经典算法,下面就简单介绍一 ...
- Java 数据结构与算法 (尚硅谷Java数据结构与算法)笔记目录
红色的表示重要,绿色的表示暂时还不懂而且很重要 线性结构和非线性结构 队列 顺序队列 循环队列 链表 链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 小结: 1) 链表 ...
- Java 编程规范 -- 易错精简版
Part 1 – 易错点 -- edit by liudeyu,If you have any adivice or suggestion, please participate in the di ...
- java圆的面积_JAVA编程中求圆的面积怎么写?
展开全部 JAVA编程中求圆的面积代码如下: import java.util.Scanner; public class yuan { public static void main(String[ ...
- 有序数组二分查找java_详解Java数据结构和算法(有序数组和二分查找)
一.概述 有序数组中常常用到二分查找,能提高查找的速度.今天,我们用顺序查找和二分查找实现数组的增删改查. 二.有序数组的优缺点 优点:查找速度比无序数组快多了 缺点:插入时要按排序方式把后面的数据进 ...
- 六边形算法java_六边形架构 Java 实现
(给ImportNew加星标,提高Java技能) 编译:唐尤华 链接:shipilev.net/jvm-anatomy-park/2-transparent-huge-pages/ 六边形架构是一种设 ...
- 实现分派问题的回溯算法java_工作分配问题 Java 回溯 | 学步园
问题描述: 设有n件工作分配给n个人.为第i个人分配工作j所需的费用为c[i][j] .试设计一个 310 2 32 3 43 4 5 import java.util.Scanner; public ...
- 最小公倍数算法java_判断两个数的最小公倍数算法JAVA代码
package suxueyuanli; import java.util.Scanner; public class Lcm { public static void main(String[] a ...
- java dijkstra算法代码_[转载]Java实现dijkstra算法: 地图中任意起点寻找最佳路径...
最近在复习java,下学期要用,写这个练手. 技术较粗糙,见谅. 代码里用的是这幅地图,根据实际情况更改,在addNode方法中 这个是运行结果,起点和终点在 运行wrap(String qidia ...
最新文章
- C#实现类似qq的屏幕截图程序
- NOI2015 程序自动分析
- 在2019年,如何成为更好的Node.js开发者?
- 13_clickhouse,Merge引擎,File引擎,External Data引擎,External Data引擎,Null Engine,URL引擎,Memory、Set、Buffer
- 不要再问我跨域的问题了
- java项目启动后运行方法_spring boot在启动项目之后执行的实现方法
- 下载丨8月数据库技术通讯:不合理业务设计导致CPU飙升
- 一些意想不到的bug
- Motherboard Monitor .NET
- jave使用corenlp
- mysql慢查询原因_mysql 慢查询的原因分析点滴
- 【转】轻松记住大端小端的含义(附对大端和小端的解释)
- 深海迷航创造模式火箭怎么飞_《我的世界》怎么用火箭使鞘翅飞起来?
- java中的IO整理(上)(微信文章)
- Linux内核之 module_init解析 (下)
- workman php 视频,利用workerman实现webrtc实时音视频通话
- (亲测解决)Tomcat启动时卡在“ Deploying web application directory ”很久的解决方法
- 三极管电路共集、共基、共射的区别
- 909万本科应届生被父母催找工作,95后:“别催了,已经在卷了”
- 差速驱动机器人轮间距校准
热门文章
- 1946年2月14号第一台计算机,1946年2月14日 世界上第一台计算机诞生,世界,您好!...
- 计算机博弈之国际跳棋入门-规则篇
- 【解决】maven install出现fatal error compiling
- js:判断页面在 微信 微博 QQ 支付宝 钉钉 内置浏览器内打开
- linux中的各文件的颜色含义
- 电脑配置很高,为什么还会卡?
- win7计算机广告更改,win7电脑弹窗广告怎么彻底关闭_win7去除弹窗广告的步骤
- 解决在Python的matplotlib.pyplot图表中显示中文
- 新能源汽车控制技术分享:VCU整车控制器电控开发
- 七大行星排列图片_太阳系九大行星排列顺序(口诀:水金地,火木土,天海)...