取近似值(整数取证)
接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
5.5 6
import java.util.*;
public class Main {
public static void main(String[] args){
String str = new Scanner(System.in).nextLine();
int index = str.indexOf(".");
int a = Integer.parseInt(str.substring(0,index));
int b = Integer.parseInt(str.substring(index+1,index+1+1));
int z;
if(b>=5){
// 主要判断第一个小数位是否>=5
z = a+1;
}else{
z = a;
}
System.out.println(z);
}
}
数字颠倒 & 字符逆序 & 字符串反转
输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
1516000 00006151
I am a student tneduts a ma I
adbc dcba
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String sb = new String("");
for(int i=str.length()-1; i>=0; i--){
// 倒叙循环将每一个 字符 追加至 ""
sb+=str.charAt(i);
}
System.out.println(sb.toString());
}
}
原串翻转
import java.util.*;
public class Reverse {
public String reverseString(String iniString) {
return new StringBuffer(iniString).reverse().toString(); // StringBuffer直接reverse
}
}
字符串最后一个单词的长度
计算字符串最后一个单词的长度,单词以空格隔开。
hello nowcoder 8
import java.util.*;
public class Main{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] arr = str.split(" "); // 转为String[],然后取最后一个元素的length()
System.out.print(arr[arr.length-1].length());
}
}
明明的随机数
生成了N个1到1000之间的随机整数,去重,从小到大排序
注意:输入可能有多组数据。每组数据都包括多行,第一行先输入随机整数的个数N,
接下来的N行再输入相应个数的整数。具体格式请看下面的"示例"。
样例有两组测试
第一组是3个数字,分别是:2,2,1。
第二组是11个数字,分别是:10,20,40,32,67,40,20,89,300,400,15。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
// 输入可能有多组数据,要保证每一组都能进入程序处理
int num = sc.nextInt();
TreeSet<Integer> set = new TreeSet<Integer>(); // TreeSet保证了去重唯一
for(int i = 0 ; i < num ;i++){
int curr = sc.nextInt();
set.add(curr);
}
for(Integer i : set){
System.out.println(i);
}
}
}
}
字符串分隔(每8个分隔)
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextLine()){
String s=scanner.nextLine();
while(s.length()>=8){
System.out.println(s.substring(0, 8));
s=s.substring(8); // 每次打印8个字符,然后截断8个,最后剩下的额外处理
}
if( s.length()<8 && s.length()>0 ){
// 如果剩余0个字符,刚好打印完就不管了,这里只管1-7个字符
s=s+"0000000"; // 这里只需要7个字符"0"即可
System.out.println(s.substring(0, 8));
}
}
}
}
提取不重复的整数
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是0。
9876673 37689
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringBuffer sb = new StringBuffer(str);
Set s = new HashSet();// 利用set去重
sb.reverse();// 字符串反转
for(int i = 0;i<sb.length();i++){
if(s.add(sb.substring(i,i+1))){
// set不允许重复添加相同的元素
System.out.print(sb.substring(i,i+1));
}
}
}
}
?最长回文子串
给定一个仅包含小写字母的字符串,求它的最长"回文子串"的长度。
回文串,指左右对称的字符串。
子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串
(注意:记得加上while处理多个测试用例)
cdabbacc 4 abba
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String input = sc.next();
System.out.println(Main.getNumber(input));
}
}
public static int getNumber(String str){
int result = 1;
StringBuffer sb = new StringBuffer(str);
String temp = sb.reverse().toString(); //将字符串反转
//获取所有子串,查看翻转后的字符串是否包含该子串
for(int i = temp.length(); i >= 1 ;i--){
//i为子串的长度
for(int j = 0; j <= temp.length()-i;j++){
String tempSubString = temp.substring(j,j + i);
if(str.contains(tempSubString)){
return i;
}
}
}
return result;
}
}
字符个数统计
例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。
import java.util.*;
public class Main {
public static void main (String[] args){
Scanner sc = new Scanner(System.in);
char[] ch = sc.nextLine().toCharArray();
int count = 0;
String len = "";
for( int i=0; i<ch.length; i++ ){
// 如果len中不包含这个字符,就追加进去,count++
if( ! len.contains( String.valueOf(ch[i]) ) ){
len+=ch[i];
count++;
}
}
System.out.print(count);
}
}
合并表记录
数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
4
0 1
0 2
1 2
3 4
0 3
1 2
3 4
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
int k = sc.nextInt();
int v = sc.nextInt();
// 利用map 的 k v数据结构,存储index和value值
if (map.containsKey(k)) {
map.put(k, map.get(k) + v);
} else
map.put(k, v);
}
for (Integer key : map.keySet()) {
System.out.println(key + " " + map.get(key));
}
}
}
单词倒排(用" "间隔)
对字符串中的所有单词进行倒排。
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//不管间隔符几个,都会被正则当做一个整体来分割成String[]
String[] sp = sc.nextLine().split("[^a-zA-Z]+");
StringBuilder sb = new StringBuilder();
for (int i=sp.length-1; i>=0; i--){
sb.append(sp[i] + " ");// 反向追加至新的字符串,用" "拼接
}
System.out.println(sb.toString().trim());// 别忘了去掉最后一个" "
}
}
找出字符串中第一个只出现一次的字符
题目中要求:输入几个非空字符串(不止一个,所以要 while(sc.hasNext() )
还有要求:输出第一个只出现一次的字符,如果不存在输出-1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
char[] arr = str.toCharArray();
String s = "-1"; //题目要求没有满足的字符,就打印-1, 所以默认值-1
for(int i = 0; i < arr.length; i++){
// for循环从左往右,自然找到的满足的字符就是 第一个要找的
// 如果第一次出现和最后一次出现的坐标是同一个
if(str.indexOf(arr[i]) == str.lastIndexOf(arr[i])){
s = arr[i]+"";
break;
}
}
System.out.println(s);
}
}
}
统计字符(英文 空格 数字 其他字符的数量)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
// 多组输入
String[] rawStrings = scanner.nextLine().split(" ");
int[] count = new int[4];
count[1] = rawStrings.length-1; // 用空格split,数组长度-1就是空格的数量
for (String s : rawStrings){
for (int i = 0; i < s.length(); i++){
if ( (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') || (s.charAt(i) >= 'a' && s.charAt(i) <= 'z')){
count[0] += 1;
}else if (s.charAt(i) >= '0' && s.charAt(i) <= '9'){
count[2] += 1;
}else{
// 剩下的就全都是其他字符了
count[3] += 1;
}
}
}
for (int num : count){
System.out.println(num);
}
}
}
}