acm java输入输出-ag凯发k8国际
一、java之acm注意点
1. 类名称必须采用public class main方式命名
2. 在有些oj系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多oj系统做的是非常之垃圾
3. 有些oj上的题目会直接将oi上的题目拷贝过来,所以即便是题目中有输入和输出文件,可能也不需要,因为在oj系统中一般是采用标准输入输出,不需要文件
4. 在有多行数据输入的情况下,一般这样处理,
static scanner in = new scanner(system.in);
while(in.hasnextint())
或者是
while(in.hasnext())
5. 有关system.nanotime()函数的使用,该函数用来返回最准确的可用系统计时器的当前值,以毫微秒为单位。
long starttime = system.nanotime();
// ... the code being measured ...
long estimatedtime = 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
import java.util.scanner;
public class main {
public static void main(string[] args) {
scanner sc =new scanner(system.in);
while(sc.hasnext()){ //判断是否结束
int score = sc.nextint();//读入整数
。。。。
}
}
}
例2:读入实数
输入数据有多组,每组占2行,第一行为一个整数n,指示第二行包含n个实数。
sample input
4
56.9 67.7 90.5 12.8
5
56.9 67.7 90.5 12.8
import java.util.scanner;
public class main {
public static void main(string[] args) {
scanner sc =new scanner(system.in);
while(sc.hasnext()){
int n = sc.nextint();
for(int i=0;i
double a = sc.nextdouble();
。。。。。。
}
}
}
}
例3:读入字符串【杭电2017 字符串统计】
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
sample input
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
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
string str = sc.next();
......
}
}
}
import java.util.scanner;
public class main {
public static void main(string[] args) {
scanner sc = new scanner(system.in);
int n = integer.parseint(sc.nextline());
for(int i=0;i
string str = sc.nextline();
......
}
}
}
例3:读入字符串【杭电2005 第几天?】
给定一个日期,输出这个日期是该年的第几天。
input 输入数据有多组,每组占一行,数据格式为yyyy/mm/dd组成
1985/1/20
2006/3/12
import java.util.scanner;
public class main {
public static void main(string[] args) {
scanner sc = new scanner(system.in);
int[] dd = {0,31,28,31,30,31,30,31,31,30,31,30,31};
while(sc.hasnext()){
int days = 0;
string str = sc.nextline();
string[] date = str.split("/");
int y = integer.parseint(date[0]);
int m = integer.parseint(date[1]);
int d = integer.parseint(date[2]);
if((y@0 == 0 || (y%4 == 0 && y0 !=0)) && m>2) days ;
days = d;
for(int i=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
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
string op = sc.next();
int a = sc.nextint();
int b = sc.nextint();
if(op.charat(0)==' '){
system.out.println(a b);
}else if(op.charat(0)=='-'){
system.out.println(a-b);
}else if(op.charat(0)=='*'){
system.out.println(a*b);
}else if(op.charat(0)=='/'){
if(a % b == 0) system.out.println(a / b);
else system.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));
public static void main(string[] args) {
numberformat formatter = new decimalformat( "000000");
string s = formatter.format(-1234.567); // -001235
system.out.println(s);
formatter = new decimalformat( "##");
s = formatter.format(-1234.567); // -1235
system.out.println(s);
s = formatter.format(0); // 0
system.out.println(s);
formatter = new decimalformat( "##00");
s = formatter.format(0); // 00
system.out.println(s);
formatter = new decimalformat( ".00");
s = formatter.format(-.567); // -.57
system.out.println(s);
formatter = new decimalformat( "0.00");
s = formatter.format(-.567); // -0.57
system.out.println(s);
formatter = new decimalformat( "#.#");
s = formatter.format(-1234.567); // -1234.6
system.out.println(s);
formatter = new decimalformat( "#.######");
s = formatter.format(-1234.567); // -1234.567
system.out.println(s);
formatter = new decimalformat( ".######");
s = formatter.format(-1234.567); // -1234.567
system.out.println(s);
formatter = new decimalformat( "#.000000");
s = formatter.format(-1234.567); // -1234.567000
system.out.println(s);
formatter = new decimalformat( "#,###,###");
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 = new decimalformat( "#;(#) ");
s = formatter.format(-1234.567); // (1235)
system.out.println(s);
// the ' symbol is used to quote literal symbols
formatter = new decimalformat( " '# '# ");
s = formatter.format(-1234.567); // -#1235
system.out.println(s);
formatter = new decimalformat( " 'abc '# ");
s = formatter.format(-1234.567); // - abc 1235
system.out.println(s);
formatter = new decimalformat( "#.##%");
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().
import java.io.bufferedinputstream;
import java.math.biginteger;
import java.util.scanner;
public class main {
public static void main(string[] args) {
scanner cin = new scanner (new bufferedinputstream(system.in));
int a = 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();
public class main {
public static void main(string[] args) {
scanner cin = new scanner (new bufferedinputstream(system.in));
int n = cin.nextint();
int a[] = new int [n];
for (int i = 0; i
arrays.sort(a);
for (int i = 0; i
}
}
总结
以上是ag凯发k8国际为你收集整理的acm java输入输出_在竞赛acm java处理输入输出的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: python程序入门设计_程序设计入门—
- 下一篇: java虚拟机调用linux_java虚