字符串最后一个单词的长度
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String s="";
// 下面这句一定要有
while(input.hasNextLine()){
s=input.nextLine(); // 输入一个字符串
// lastIndexOf 表示" "在字符串中最后一次出现的为
System.out.println(s.length()-1-s.lastIndexOf(" "));
}
}
}
2 测试
hello world
5
计算字符个数
1 程序
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
String str = s.next(); // 输入的字符串
char c = s.next().charAt(0); // 输入的要比较的字符
int i = getCount(str,c); // 定义功能函数
System.out.println(i);
}
public static int getCount(String str,char c){
int count = 0;
if(str != null && str.length() > 0){ // 字符串的长度必须不为空
for(int i = 0;i < str.length();i++){ // 遍历字符串的每一个字符
char ch = str.charAt(i); // 定位到每一个要比较的字符
char temp =ch; // 比较临时变量
char temp1=c; // 比较临时变量
if(ch>='a'&&ch<='z'){ // 小写转大写,注意是32
temp = (char)((int)ch -32);
}
if(c>='a'&&c<='z'){ // 小写转大写,注意是32
temp1 = (char)((int)c -32);
}
if(temp1 == temp){ // 计数
count++;
}
}
}else{
count = 0; // 空串计数为0
}
return count;
}
}
2 测试
ABCDEF
A
1
明明的随机数
1 程序
import java.util.Scanner;
import java.util.TreeSet;
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>(); // 有排序和去重的功能,默认升序
for(int i = 0 ; i < num ;i++){
int curr = sc.nextInt(); // 输入要排序的随机数
set.add(curr); // 加入的集合,进行去重和排序
}
for(Integer i : set){ // 注意这种循环写法
System.out.println(i); // 默认就是按照从小到大的顺序输出
}
}
}
}
2 测试
11
12
21
12
21
34
56
78
98
56
43
23
12
21
23
34
43
56
78
98
字符串分隔
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextLine()){ // 使得具有循环功能
String s=scanner.nextLine(); //输入字符串
split(s); //分割字符串
}
}
public static void split(String s){
while(s.length()>=8){
// 输出前8位
System.out.println(s.substring(0, 8));
// 去掉前8位
s=s.substring(8);
}
if(s.length()>0){
s=s+"00000000"; // 不足8位加8位
System.out.println(s.substring(0, 8)); // 再截取最后一个8位
}
}
}
2 测试
abc
abc00000
123456789
12345678
90000000
进制转换
1 程序
import java.lang.Math;
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(); //输入一个十六进制数
System.out.println(fun(str.substring(2))); //去掉0x
}
}
public static int fun(String s){
int n=0; // 十进制数
int temp = 0; // 表示每一位的数字
char ch; // 字符串中的每一位
// 0xABCD = 10*pow(16,3)+11*pow(16,2)+12*pow(16,1)+10*pow(16,0)+
for(int i =0 ;i<s.length();i++)
{
ch = s.charAt(i);
if(ch>='0'&&ch<='9'){ // 0到9对应的整型值
temp = ch-'0';
}else if(ch>='A'&&ch<='Z'){ // A到Z对应的整型值
temp = ch-'A'+10;
}else if(ch>='a'&&ch<='z'){ // a到z对应的整型值
temp = ch-'a'+10;
}else{
break; // 非法跳出
}
n += temp*Math.pow(16,(s.length()-i-1));
}
return n;
}
}
2 测试
OxABC
2748
质数因子
1 程序
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner str = new Scanner(System.in);
long num = str.nextLong(); // 输入一个整数
String result = getResult(num); // 功能函数
System.out.println(result);
}
public static String getResult(long num){
int pum = 2; // 这里必须从2开始,先把所有为2的除尽,然后再把所有位3的除尽,依次类推
String result = ""; // 记录分解后的质数
while(num != 1){
while(num%pum == 0){
num = num/pum; // 得出下一次要分解的数
result = result + pum + " "; // 从小到大依次输出质数
}
pum++;
}
return result;
}
}
2 测试
180
2 2 3 3 5
取近似值
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
double d=scanner.nextDouble(); // 输入一个浮点数
System.out.println(getReturn(d));
}
public static int getReturn(double d) {
int i=(int)d; //浮点数的整数部分
// 下面实现四舍五入
if((d-i)>=0.5){
return i+1;
}else{
return i;
}
}
}
2 测试
5.5
6
合并表记录
1 程序
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
// TreeMap是具有排序功能的Map
Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
int n = sc.nextInt(); // 要合并的健值对个数
for (int i = 0; i < n; i++) {
int s=sc.nextInt(); // 键
int value=sc.nextInt(); // 值
if (map.containsKey(s)) { // map中已包含了这个键
map.put(s, map.get(s) + value); // 将该键的值类加
} else
map.put(s, value); // 键值对加入到map中
}
for (Integer key : map.keySet()) { // 默认按照键的升序排列,直接输出map的键值对
System.out.println(key + " " + map.get(key));
}
}
}
}
2 测试
4
0 1
0 2
1 2
3 4
0 3
1 2
3 4
提取不重复的整数
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner str = new Scanner(System.in);
StringBuffer sb = new StringBuffer();
sb.append(str.next()); // 静态字符串转动态字符串
String st = sb.reverse().toString(); // StringBuffer的reverse很管用的
char[] ch = st.toCharArray(); // 转字符数组
String jud = ""; // 最终要得到的串
for (int i = 0; i < ch.length ; i++){ // 遍历字符数组
String s1 = String.valueOf(ch[i]); // 将字符转字符串
if(!jud.contains(s1)){ // 不包含字符才能加
jud = jud + s1;
}
}
System.out.println(Integer.parseInt(jud));
}
}
2 测试
56347645
54673
字符个数统计
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
String s=scanner.nextLine(); // 输入字符串
int len=getLen(s);
System.out.println(len);
}
}
public static int getLen(String s) {
int[] arr=new int[128]; // ASCII的字符表,对应为1或0,1表示字符串含有该字符,0,不含有该字符
for(int i=0;i<s.length();i++){
arr[s.charAt(i)]=1; // s.charAt(i)表示对于的ASCII字符
}
int len=0;
// 这里要注意,数组要用length,字符串要用length(),一个是有括号的,一个是没括号的
for (int i = 0; i < arr.length; i++) {
if(arr[i]==1){ // 为1,说明有该字符,就计数
len++;
}
}
return len;
}
}
2 测试
sahdfjfasdlfjgshfgwegfgsdfsdh
10
数字颠倒
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n = new Scanner(System.in).nextInt(); // 输入一个整数
System.out.println(reverse(n));
}
private static String reverse(int n){
String str = String.valueOf(n); // 将整数转化为字符串要用String.valueOf 将字符串转整数用 Integer.parseInt
StringBuffer sb = new StringBuffer();
for(int i=str.length()-1;i>=0;i--){
sb.append(str.charAt(i)); //倒序将字符加入到StringBuffer
}
return sb.toString(); // 注意这里要toString下
}
}
2 测试
56348756
65784365
字符串反转
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String s = in.nextLine(); // 输入字符串
char[] b = s.toCharArray(); // 字符串转字符数组
for (int i = b.length-1; i >= 0; i--) { // 倒序输出
System.out.print(b[i]);
}
}
}
}
2 测试
fgsdafdhk
khdfadsgf
句子逆序
1 程序
import java.util.*;
public class Main{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
String str=scan.nextLine(); // 输入字符串
String res=reverse(str); // 逆序功能
System.out.println(res); // 逆序结果
}
public static String reverse(String str)
{
String[] s=str.split(" "); // 单词存到字符串数组
StringBuffer sb=new StringBuffer(); // 缓存结果
for(int i=s.length-1;i>0;i--) // 逆序保存
{
sb.append(s[i]);
sb.append(" ");
}
sb.append(s[0]); // 最后一个要单独出来
return sb.toString(); // 注意要toString
}
}
2 测试
I am a boy
boy a am I
字串的连接最长路径查找(字符串按自然顺序排序)
1 程序
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner scan=new Scanner(System.in);
ArrayList<String> list=new ArrayList<String>();
//int num=scan.hasNextLine()?Integer.parseInt(scan.nextLine()):0;
int num = Integer.parseInt(scan.nextLine());
for(int i=0;i<num;i++){
list.add(scan.nextLine()); // 输入要排序的字符串
}
Collections.sort(list); // 对list集合元素按自然数升序排序
for(String str:list){ // 输出排序结果
System.out.println(str);
}
}
}
2 测试
5
cap
num
cakin
so
go
cakin
cap
go
num
so
求int型数据在内存中存储时1的个数
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner str = new Scanner(System.in);
int n = str.nextInt(); // 输入自然数
String se = Integer.toBinaryString(n); // 自然数转二进制字符串,toBinaryString关键是这句
char[] ch = se.toCharArray(); // 继续转字符数组
int count = 0;
for(int i = 0;i<se.length();i++){ // 对一进行统计
if(ch[i] == '1'){
count++;
}
}
System.out.println(count);
}
}
2 测试
5
2
坐标移动
1 程序
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner scan=new Scanner(System.in);
while(scan.hasNextLine()){
// 起始坐标为(0,0)
int x=0;
int y=0;
String[]tokens=scan.nextLine().split(";"); // 将字符串转化为数组
for(int i=0;i<tokens.length;i++){
try{
int b=Integer.parseInt(tokens[i].substring(1)); // 取移动的数字
if(tokens[i].charAt(0)=='A'){ // 横坐标左移动
x-=b;
}
if(tokens[i].charAt(0)=='W'){ // 纵坐标上移动
y+=b;
}
if(tokens[i].charAt(0)=='S'){ // 纵坐标下移动
y-=b;
}
if(tokens[i].charAt(0)=='D'){ // 横坐标右移动
x+=b;
}
}catch(Exception e){
continue;
}
}
System.out.println(x+","+y); // 最后的结果
}
}
}
2 测试
A10;S20;W10;D30;X;A1A;B10A11;;A10;
10,-10
密码验证合格程序
1 程序
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str=sc.nextLine(); // 输入密码
int i=0;
int[] cla={0,0,0,0}; // 对4种情况进行记录,初始值都是0
if(str.length()<9) // 必须大于8
System.out.println("NG");
else{
for(i=0;i<str.length();i++){
char ch=str.charAt(i); // 遍历每一个字符
if(ch>='0'&&ch<='9'){ // 数字情况
cla[0]=1;
}else if(ch>='a'&&ch<='z'){ // 小写字母
cla[1]=1;
}else if(ch>='A'&&ch<='Z'){ // 大写字母
cla[2]=1;
}else{ // 其他情况
cla[3]=1;
}
}
if(cla[0]+cla[1]+cla[2]+cla[3]<3){ // 小于3 ,pass掉
System.out.println("NG");
}else{
System.out.println(isHasSubString(str)); // 对重复串的判断
}
}
}
}
private static String isHasSubString(String str) {
/** A B C D E F G
* 第1轮: ABC DEFG 看DEFG是否包含ABC
* 第2轮:BCD EFG 看EFG是否包含BCD
* 第3轮:CDE FG 看FG是否包含CDE
* 第4轮:DEF G 看G是否包含DEF
*
*/
for (int i = 0; i < str.length() -3; i++) {
String str1=str.substring(i,i+3); // 前面3位子串
String str2=str.substring(i+3); // 后面的子串
if(str2.contains(str1)) // 后面的子串包含前面的子串,就退出
return "NG";
}
return "OK";
}
}
2 测试
dfshay7w
NG
djsl5h43
NG
7f8dsh45b46#
OK
简单密码破解
1 程序
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str=sc.nextLine(); // 明文
String ss=""; //密文
int i=0;
for(i=0;i<str.length();i++){ // 遍历明文中的每一个字符
char ch=str.charAt(i);
if(ch>='0'&&ch<='9') // 数字不变化
ss=ss+ch;
if(ch>='a'&&ch<='z'){ //小写字母变化
if(ch>='a'&&ch<='c')
ss=ss+"2";
if(ch>='d'&&ch<='f')
ss=ss+"3";
if(ch>='g'&&ch<='i')
ss=ss+"4";
if(ch>='j'&&ch<='l')
ss=ss+"5";
if(ch>='m'&&ch<='o')
ss=ss+"6";
if(ch>='p'&&ch<='s')
ss=ss+"7";
if(ch>='t'&&ch<='v')
ss=ss+"8";
if(ch>='w'&&ch<='z')
ss=ss+"9";
}
if(ch>='A'&&ch<='Z'){ // 大写字母变化
//char cc=Character.toLowerCase(ch); //字符变小写
char cc = (char)((int)ch+32); //大写子符变小写
if(cc=='z')
ss=ss+"a"; // 特殊情况处理
else
{
ss=ss+(char)((int)cc+1); //字符加1
}
}
}
System.out.println(ss);
}
sc.close();
}
}
2 测试
YUANzhi1987
zvbo9441987
汽水瓶
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){ // 循环输出
int num = sc.nextInt(); // 输入空瓶
if(num==0) break; // 空瓶为0,程序结束
int left = num; // 剩余空瓶数
int total = 0; // 喝了多少瓶汽水
while(left!=0){ // 只要剩余空瓶数不为0就可以换汽水
if(left==2){ // 如果剩余空瓶数为2 可以多换一瓶,类加汽水数
total+=1;
break;
}else if(left==1){ // 如果剩余空瓶数为1 ,不能换了
break;
}else{
int curr = left/3; // 剩余空瓶可以换的汽水数
total+=curr; // 累加汽水数
left = left-curr*3+curr; // 换完汽水,喝完汽水后,还剩的空瓶数,少了curr*3空瓶,但多出了curr
}
}
System.out.println(total);
}
}
}
2 测试
3
1
10
5
81
40
0
删除字符串中出现次数最少的字符
1 程序
import java.util.*;
public class Main{
public static void main(String []args) {
Scanner scan = new Scanner(System.in);
String s = null; // s代表要输入的字符串
while(scan.hasNextLine()){
s=scan.nextLine();
int []count = new int[26]; // 对26个小写字母计数
int min = Integer.MAX_VALUE; // 最大的int值
for(char c : s.toCharArray()){ // 遍历输入串,统计每个字符的个数,并算出最小字符的个数
count[c - 'a']++;
min = Math.min(min,count[c-'a']);
}
StringBuffer ret = new StringBuffer(); // 最终的串
for(char c : s.toCharArray()){ // 遍历字符歘
if(count[c - 'a'] != min){ // 过滤掉最小的字符
ret.append(c);
}
}
System.out.println(ret.toString());
}
}
}
2 测试
fhsdajkfgswegsdh
fhsdfgsgsdh
二六 字符串排序
1 程序
import java.util.*;
public class Main{
public static void main(String []args) {
Scanner scan = new Scanner(System.in);
String str;
while(scan.hasNextLine()){
str=scan.nextLine();
StringBuilder builder = new StringBuilder(); // 最终输出
for(int i=0;i<26;i++){ // 外层循环遍历26个大写字母
char c=(char)(i+'A'); // c定位到每一个大写字母
for(int j=0;j<str.length();j++){ // 遍历输入的字符串
char sc=str.charAt(j);
if(c==sc||c==sc-32){ // 找到对应字母的大写字母和小写字母
builder.append(sc); // 遍历完1轮后,将对应的大写字母和小写字母输出到缓存
}
}
}
for(int i=0;i<str.length();i++){ // 遍历输入字符串
char c=str.charAt(i);
if(!(c>='a'&&c<='z')&&!(c>='A'&&c<='Z')){ //找到每一个非字母字符和它对应的下标
builder.insert(i,c); // 在对应下标位置插入对应的非字母字符
}
}
System.out.println(builder.toString()); // 最终输出变换后的串
}
}
}
2 测试
A Famous Saying: Much Ado About Nothing (2012/8).
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
二七 查找兄弟单词
1 程序
import java.util.*;
/*
Arrays.equals(strChar, sChar) Arrays.sort(strChar); 对数组的相关操作
Collections.sort(list) 对列表的排序 注意这些常用工具的用法
* */
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt(); // 输入单词个数n
String[] arr = new String[n]; // 定义要处理的字符串
for (int i = 0; i < n; i++) { // 输入n个字符串
arr[i] = scanner.next();
}
String str = scanner.next(); // 输出要进行比较的单词
int m = scanner.nextInt(); // 输出第m个兄弟单词
char[] strChar = str.toCharArray(); // 转字符数组
Arrays.sort(strChar); //对输入的指定单词的内部字符元素按字典序排序
ArrayList<String> list = new ArrayList<String>();
int count = 0; // 兄弟单词计数
for (int i = 0; i < n; i++) {
int c = check(str, arr[i], strChar); // 返回值为1,就是兄弟单词
count += c;
if (c == 1) { //如果是兄弟单词,加入到集合中
list.add(arr[i]);
}
}
System.out.println(count);
Collections.sort(list); //对兄弟单词排序,注意这种用法
if (count >= m) {
System.out.println(list.get(m - 1)); // 输出对应的兄弟单词
}
}
}
private static int check(String str, String s, char[] strChar) { // 参考串 输入串 排完序的串
if (str.equals(s) || str.length() != s.length()) { //如果两个单词内容相同或长度不等,表明不是兄弟单词
return 0;
}
char[] sChar = s.toCharArray(); // 将输入串转化为字符数组
Arrays.sort(sChar); //进行字典序排序
return Arrays.equals(strChar, sChar) ? 1 : 0; //比较排序后两个单词内容是否相等
}
}
2 测试
3 abc bca cab abc 1
2
bca
字符串加解密
1 程序
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str;
while(scan.hasNextLine()){
str=scan.nextLine(); // 输入明文
String str1 = Encrypt(str); // 加密
System.out.println(str1); // 输出密文
str=scan.nextLine(); // 输入密文
String str2=unEncrypt(str); // 解密
System.out.println(str2); // 输出明文
}
}
private static String Encrypt(String line){
char[] cha = line.toCharArray(); // 字符串数组化
StringBuilder sb= new StringBuilder(); // 密文缓存
for(int i=0;i<cha.length;i++){ // 遍历明文
if (cha[i]>='a'&&cha[i]<='z'){ // 小写字母转大写
if(cha[i]=='z'){
sb.append('A');
}else{
sb.append((char)(cha[i]-32+1)); // 小写字母和大写字母相差32
}
}else if(cha[i]>='A'&&cha[i]<='Z'){ // 大写字母转小写
if(cha[i]=='Z'){
sb.append('a');
}else{
sb.append((char)(cha[i]+32+1)); // 小写字母和大写字母相差32
}
}else if(cha[i]>='0'&&cha[i]<='9'){ // 数字转化方法
if(cha[i]=='9'){
sb.append('0');
}else{
sb.append((char)(cha[i]+1)); // 注意:这里一定要进行强制类型转换
}
}else{
sb.append(cha[i]); // 其他情况不变化
}
}
return sb.toString();
}
private static String unEncrypt(String line){
char[] cha = line.toCharArray(); // 字符串数组化
StringBuilder sb= new StringBuilder(); // 明文缓存
for(int i=0;i<cha.length;i++){
if (cha[i]>='a'&&cha[i]<='z'){ // 小写字母转大写
if(cha[i]=='a'){
sb.append('Z');
}else{
sb.append((char)(cha[i]-32-1)); // 小写字母和大写字母相差32
}
}else if(cha[i]>='A'&&cha[i]<='Z'){ // 大写字母转小写
if(cha[i]=='A'){
sb.append('z');
}else{
sb.append((char)(cha[i]+32-1)); // 小写字母和大写字母相差32
}
}else if(cha[i]>='0'&&cha[i]<='9'){ // 数字变化
if(cha[i]=='0'){
sb.append('9');
}else{
sb.append((char)(cha[i]-1));
}
}else{
sb.append(cha[i]); // 其他不变化
}
}
return sb.toString();
}
}
2 测试
abcdefg
BCDEFGH
BCDEFGH
abcdefg
字符串合并处理
1 程序
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
String line;
while(scan.hasNextLine()) {
line=scan.nextLine(); //输入的字符串
String[] str=line.split(" "); // 将输入的字符串转为为数字
String s=str[0]+str[1]; // 合并字符串
StringBuilder br1=new StringBuilder(); // 0,2,4 位置的缓存
StringBuilder br2=new StringBuilder(); // 1,3 5 位置的缓存
for(int i=0;i<s.length();i++) { // 遍历缓存
if(i%2==0) {
br1.append(s.charAt(i));
}
else {
br2.append(s.charAt(i));
}
}
char[] ch1=br1.toString().toCharArray(); // 转字符数组
char[] ch2=br2.toString().toCharArray(); // 转字符数组
Arrays.sort(ch1); // 排序
Arrays.sort(ch2); // 排序
char[] ch=new char[ch1.length+ch2.length]; // 存新串
for(int i=0;i<ch.length;i++) {
if(i%2==0) {
ch[i]=ch1[i/2]; // 存 0,2,4 位置
}
else {
ch[i]=ch2[i/2]; // 存1,3,5 位置
}
}
char[] password = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F'};
char[] dictionary = {'0','8','4','C','2','A','6','E','1','9','5','D','3','B','7','F','5','D','3','B','7','F'};
for(int i=0;i<ch.length;i++) {
if((ch[i]>='0'&&ch[i]<='9')||(ch[i]>='a'&&ch[i]<='f')||(ch[i]>='A'&&ch[i]<='F')) {
String temp = String.valueOf(password); // 字符数组转字符串
ch[i]=dictionary[temp.indexOf(ch[i])]; // 换后的值
}
}
System.out.println(ch);
}
}
}
2 测试
dec fab
5D37BF
【中级】单词倒排
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
String line;
while (scan.hasNextLine()){
line=scan.nextLine();
StringBuffer str1 = new StringBuffer();
for (int i=0;i<line.length();i++){ //清洗原字符串
char c=line.charAt(i);
if ((c>='A'&&c<='Z')||(c>='a'&&c<='z')){
str1.append(c);
}else {
str1.append(' ');
}
}
String[] str = str1.toString().trim().split(" "); // 倒排字符串,注意这里要加trim
StringBuffer sb=new StringBuffer();
for (int i=0;i<str.length-1;i++){
sb.append(str[str.length-i-1]);
sb.append(" ");
}
sb.append(str[0]);
System.out.println(sb.toString());
}
}
}
2 测试
I am a student
student a am I
整数与IP地址间的转换
1 程序
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
String str;
while(scan.hasNextLine()) {
str=scan.nextLine(); // 点分十进制
Change1(str);
str=scan.nextLine(); // 十进制
Change2(str);
}
}
public static void Change1(String str) { // 转十进制
String[] data1 = str.split("\\."); // 点分隔要转义
data1[0] = Integer.toBinaryString(Integer.parseInt(data1[0]));
data1[1] = Integer.toBinaryString(Integer.parseInt(data1[1]));
data1[2] = Integer.toBinaryString(Integer.parseInt(data1[2]));
data1[3] = Integer.toBinaryString(Integer.parseInt(data1[3]));
// 转为标准的二进制串
while(data1[0].length()<8) data1[0] = "0"+data1[0];
while(data1[1].length()<8) data1[1] = "0"+data1[1];
while(data1[2].length()<8) data1[2] = "0"+data1[2];
while(data1[3].length()<8) data1[3] = "0"+data1[3];
long sum = 0;
// 采用的思想是左移为乘以2 ,然后加最低位, 依次类推
for(int i=0;i<data1.length;i++) { // 这里的长度为4
for(int j=0;j<data1[0].length();j++) { // 这里的长度为8
sum = sum*2+(data1[i].charAt(j)-'0'); // 从左往右依次定位 10100010 10100010 10100010 10100010
}
}
System.out.println(sum); // 输出十进制
}
public static void Change2(String str) { // 转点分十进制
long data2 = Long.parseLong(str); // 字符串转数字
String bindata2 = Long.toBinaryString(data2); // 转二进制串
String[] data = new String[4];
// 10 01100010 10100010 10100010
data[0] = bindata2.substring(0,bindata2.length()-3*8); // 第一段
data[1] = bindata2.substring(data[0].length(),data[0].length()+8); // 第二段
data[2] = bindata2.substring(data[0].length()+data[1].length(),data[0].length()+data[1].length()+8); // 第三段
data[3] = bindata2.substring(bindata2.length()-8,bindata2.length()); // 第4段
System.out.print(Integer.valueOf(data[0],2)+"."); // 二进制转十进制
System.out.print(Integer.valueOf(data[1],2)+".");
System.out.print(Integer.valueOf(data[2],2)+".");
System.out.println(Integer.valueOf(data[3],2));
}
}
2 测试
10.0.3.193
167773121
167773121
10.0.3.193
图片整理
1 代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String line ;
while(scan.hasNextLine())
{
line = scan.nextLine();
char[] chs = line.toCharArray(); // 转字符数组
Arrays.sort(chs); // 排序
System.out.println(chs); // 输出
}
}
}
2 测试
Ihave1nose2hands10fingers
0112Iaadeeefghhinnnorsssv
蛇形矩阵
1 代码
import java.util.Scanner;
/*
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
想找9,就先找到7
想找14,就先找11
也就是先找到斜线和第1列元素的值
* */
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();//矩阵行数
System.out.print(getResult(n));
}
}
private static String getResult(int n){
StringBuilder builder = new StringBuilder();
// i代表行坐标,j代表列坐标
for(int i=1;i<=n;i++){
//j为每行元素个数,start为每行第一个数,step为间隔
for(int j=1;j<=n-i+1;j++){
//[i,j]对应的第1列元素坐标是是[i+j-1,1],该坐标的值为1+1+2+ ...(i+j-1-1) = 1+(i+j-1)(i+j-2)/2
//[i,j]对应的值1+(i+j-1)(i+j-2)/2+(j-1)
int temp = 1+(i+j-1)*(i+j-2)/2+(j-1);
builder.append(String.valueOf(temp)).append(" ");
}
builder.append("\n");
//设置换行符
// builder.setCharAt(builder.length()-1,'\n');
}
return builder.toString();
}
}
2 测试
4
1 3 6 10
2 5 9
4 8
7
统计每个月兔子的总数
1 程序
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int monthCount = scan.nextInt(); //输入月数
System.out.println(getTotalCount(monthCount));
}
}
public static int getTotalCount(int monthCount)
{
int a = 1;
int b = 1;
int c = 1;
for(int i=2; i< monthCount; ++i)
{
c = a + b;
a = b;
b = c;
}
return c;
}
}
2 测试
9
34
求小球落地5次后所经历的路程和第5次反弹的高度
1 程序
import java.util.Scanner;
public class Main {
public static void main(String[]args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int high=in.nextInt();
System.out.println(getJourney(high));
System.out.println(getTenthHigh(high));
}
}
public static double getJourney(int high)
{
double highSum=0;
double high1=high;
for(int i=1;i<=5;i++){
highSum+=high1+high1/2;
high1/=2;
}
highSum-=high1;
return highSum;
}
public static double getTenthHigh(int high)
{
double highSum=0;
double high1=high;
for(int i=1;i<=5;i++){
high1/=2;
}
return high1;
}
}
2 测试
2.875
0.03125
输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
1 程序
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = "";
while((line = br.readLine())!=null)
{
int EnglishCharCount=0; //英文
int BlankCharCount=0; //空白
int NumberCharCount=0; //数字
int OtherCharCount=0; //其他
char[] chs = line.toCharArray();
for(int i=0;i<chs.length;++i){
if((chs[i]>='a'&&chs[i]<='z')||(chs[i]>='A'&&chs[i]<='Z')){
++EnglishCharCount;
continue;
}
else if(chs[i]==' '){
++BlankCharCount;
continue;
}
else if(chs[i]>='0'&&chs[i]<='9'){
++NumberCharCount;
continue;
}
else
++OtherCharCount;
}
System.out.println(EnglishCharCount);
System.out.println(BlankCharCount);
System.out.println(NumberCharCount);
System.out.println(OtherCharCount);
}
}
}
2 测试
1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][
26
3
10
12