问题一:
题目描述
字典序排序一些二值对,输入形式(k,v),字典序排序一些二值对,输入形式(k,v)
输入描述:
第一行为二值队数量
输入形式(k,v),而且第一个逗号后面可以有0或多个空格,输出时原先有几个就输出几个
输出描述:
同样形式
示例1
输入
2
(2, 23)
(4, 233)
输出
(2, 23)
(4, 233)
import java.util.*;
import java.io.*;
import java.text.* ;
public class Main
{
static int n;
static int m;
static int[][] matrix;
static int res = Integer.MAX_VALUE;
static int k;
public static void main(String[] args){
try {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String str;
while((str = br.readLine()) != null) {
int n = Integer.parseInt(str);
twoNums[] nums = new twoNums[n];
for(int i = 0; i < n; i++) {
String str2 = br.readLine();
String[] parts = str2.split(",");
int x = Integer.parseInt(parts[0].substring(1));
int count = 0;
for(int j = 0; j < parts[1].length(); j++) {
if(parts[1].charAt(j)==' ') count++;
else break;
}
int y = Integer.parseInt(parts[1].substring(count,parts[1].length()-1));
nums[i] = new twoNums(x, y, str2);
}
Arrays.sort(nums, new Comparator<twoNums>() {
public int compare(twoNums o1, twoNums o2) {
return o1.num2 - o2.num2;
}
});
Arrays.sort(nums, new Comparator<twoNums>() {
public int compare(twoNums o1, twoNums o2) {
return o1.num1 - o2.num1;
}
});
for(int i = 0; i < n; i++) {
System.out.println(nums[i].word);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class twoNums{
int num1;
int num2;
String word;
twoNums(int x, int y, String z){
num1 = x;
num2 = y;
word = z;
}
}
问题二:
题目描述
给定一个整数 n,返回 n! 结果尾数中零的数量。
输入描述:
一个整数n
输出描述:
n! 结果尾数中零的数量
示例1
输入
10
输出
2
import java.util.*;
import java.io.*;
import java.text.* ;
public class Main
{
static int n;
static int m;
static int[][] matrix;
static int res = Integer.MAX_VALUE;
static int k;
public static void main(String[] args){
try {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String str;
while((str = br.readLine()) != null) {
int n = Integer.parseInt(str);
System.out.println(trailingZeroes(n));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static int trailingZeroes(int n) {
int res = 0;
while(n > 0) {
res += n/5;
n /= 5;
}
return res;
}
}
问题三:
题目描述
把一个十进制定点小数(0~1之间)转换为16进制
输入描述:
不限长度
输出描述:
输出要求小数最多32位
示例1
输入
0.1280625
输出
0.21
import java.util.*;
import java.io.*;
import java.text.* ;
import java.math.*;
public class Main
{
static int n;
static int m;
static int[][] matrix;
static int res = Integer.MAX_VALUE;
static int k;
public static void main(String[] args){
try {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String str;
BigInteger b = new BigInteger("16");
HashMap<String, String> map = new HashMap<>();
map.put("0","0");
map.put("1","1");
map.put("2","2");
map.put("3","3");
map.put("4","4");
map.put("5","5");
map.put("6","6");
map.put("7","7");
map.put("8","8");
map.put("9","9");
map.put("10","A");
map.put("11","B");
map.put("12","C");
map.put("13","D");
map.put("14","E");
map.put("15","F");
while((str = br.readLine()) != null) {
StringBuilder res = new StringBuilder("0.");
String[] parts = str.split("\\.");
BigInteger a = new BigInteger(parts[1]);
int len = parts[1].length();
for(int i = 0; i < 32; i++) {
BigInteger tmp = a.multiply(b);
StringBuilder s = new StringBuilder("1");
for(int j = 0; j < len; j++) {
s.append("0");
}
BigInteger n = new BigInteger(s.toString());
String count = tmp.divide(n).toString();
System.out.println(count);
int num = Integer.parseInt(count);
res.append(map.get(count));
len = tmp.toString().length();
if(num >= 10) len -= 2;
else if(num > 0) len -= 1;
a = tmp.remainder(n);
}
System.out.println(res);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}