输出该字符串反转后的字符串

1、写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

输入描述:
输入N个字符

输出描述:
输出该字符串反转后的字符串
示例1
输入
abcd
输出
dcba


import java.util.*;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner s=new Scanner(System.in);
        String b="";
        String str=s.nextLine();
        for(int i=str.length()-1;i>=0;i--){
            b+=str.charAt(i);
        }
        System.out.println(b);
    }
}

2、写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

输入描述:
输入N个字符

输出描述:
输出该字符串反转后的字符串

示例1
输入
abcd
输出
dcba

import java.io.*;
public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        while((str=br.readLine())!=null){
            StringBuilder sb = new StringBuilder(str);
            System.out.println(sb.reverse());
        }
    }
}

import java.util.*;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner s=new Scanner(System.in);
        String b="";
        String str=s.nextLine();
        for(int i=str.length()-1;i>=0;i--){
            b+=str.charAt(i);
        }
        System.out.println(b);
    }
}

3、有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

示例1
输入
3
10
81
0
输出
1
5
40

import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        while((str = br.readLine()) != null){
            int n = Integer.parseInt(str);
            int sum = 0;
            while (n > 2){
                int temp = n / 3;
                sum += temp;
                n = temp + n % 3;
            }
            if(n == 2){
                System.out.println(sum+1);
            }else{
                System.out.println(sum);
            }
        }
    }
}

4、有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?

/**

  • 统计出兔子总数。
  • @param monthCount 第几个月
  • @return 兔子总数
    */
    public static int getTotalCount(int monthCount)
    {
    return 0;
    }

本题有多组数据,请使用while (cin>>)读取

输入描述:
输入int型表示month

输出描述:
输出兔子总数int型

示例1
输入
9
输出
34
思路:
一个兔子(第一个月无仔,第二个月无仔,第三个月一个仔)
写数字,找规律

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        while ((str = cin.readLine()) != null) {
            int n = Integer.parseInt(str);
            System.out.println(count(n));
        }
    }
    public static int count(int n){
        int[] f = new int[n + 1];
        f[0] = 0;
        f[1] = 1;
        for (int i = 2; i <= n; i++) {
            f[i] = f[i-2] + f[i-1];
        }
        return f[n];
    }
}

5、请实现如下接口

/* 功能:四则运算

 * 输入:strExpression:字符串格式的算术表达式,如: "3+2*{1+2*[-4/(8-6)+7]}"

     * 返回:算术表达式的计算结果

 */

public static int calculate(String strExpression)

{

    /* 请实现*/

    return 0;

} 

约束:

pucExpression字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。

pucExpression算术表达式的有效性由调用者保证;

输入描述:
输入一个算术表达式

输出描述:
得到计算结果

示例1
输入
3+2*{1+2*[-4/(8-6)+7]}
输出
25

在这里插入代码片

6、杨辉三角的变形

1

1 1 1

1 2 3 2 1

1 3 6 7 6 3 1

1 4 10 16 19 16 10 4 1

以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。

求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。

输入n(n <= 1000000000)
本题有多组输入数据,输入到文件末尾,请使用while(cin>>)等方式读入
输入描述:
输入一个int整数

输出描述:
输出返回的int值

示例1
输入
4
输出
3
思路:
1
1 1 1
1 2 3 2 1
1 3 6 763 1

1 41016 19

1 515 30 …

再看每一行的第三个数据,1 3 6 10 15…这些都是1 1+2 1+2+3 1+2+3+4 1+2+3+4+5…递增相加,所以它的奇偶也是逐渐变化的,所以在偶数行中,第4 8 12 …行的第三位都是偶数;而第6 10 14…也的第四位成功的因为前面一行的偶数成为了偶数;<暂时找不到好的规律的说,不过可以参考一下下面>
好吧,从第一行开始向下看,从左往右看四个数据,到中间为止(够四个的就看过来)

1 奇
2 奇奇
3 奇偶奇
4 奇奇偶奇
5 奇偶偶偶
6奇奇奇偶
7 奇偶奇偶
8奇奇偶奇

前面两行我就不说了,3 5 7 行也都是很明显的,第二位是偶数

由第4行到第7行,分别是奇奇偶奇 奇偶偶偶 奇奇奇偶 奇偶奇偶,而在第8行,又和第4行一样了奇奇偶奇,所以,后面的行前面4个数据也会按照这个规律下去;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    //  iNOC产品部-杨辉三角的变形
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = "";
        while ((line = br.readLine()) != null) {
            System.out.println(getResult(line));
        }
    }
    public static int getResult(String str) {
        int i = Integer.valueOf(str);
        if (i <= 2) {
            return -1;
        } else if (i % 2 == 1) {
            return 2;
        } else {
            if (i % 4 == 0) {
                return 3;
            } else {
                return 4;
            }
        }
    }
}

7、给定一个字符串描述的算术表达式,计算出结果值。

输入字符串长度不超过100,合法的字符包括”+, -, *, /, (, )”,”0-9”,字符串内容的合法性及表达式语法的合法性由做题者检查。本题目只涉及整型计算。

输入描述:
输入算术表达式

输出描述:
计算出结果值

示例1
输入
400+5
输出
405

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
 
/**
 * @author caozb
 * @date 2020/7/16 4:48 下午
 */
public class Main {
    // 中缀转后缀
    //具体转换方式:
    // 1.从左到右进行遍历
    // 2.运算数,直接输出.
    // 3.左括号,直接压入堆栈,(括号是最高优先级,无需比较)(入栈后优先级降到最低,确保其他符号正常入栈)
    // 4.右括号,(意味着括号已结束)不断弹出栈顶运算符并输出直到遇到左括号(弹出但不输出)
    // 5.运算符,将该运算符与栈顶运算符进行比较,
    // 如果优先级高于栈顶运算符则压入堆栈(该部分运算还不能进行),
    // 如果优先级低于等于栈顶运算符则将栈顶运算符弹出并输出,然后比较新的栈顶运算符.
    // (低于弹出意味着前面部分可以运算,先输出的一定是高优先级运算符,等于弹出是因为同等优先级,从左到右运算)
    // 直到优先级大于栈顶运算符或者栈空,再将该运算符入栈.
    // 6.如果对象处理完毕,则按顺序弹出并输出栈中所有运算符.
    // 测试用 3-10+(0+(10+5+3)-10)
    // 5-3+9*6*(6-10-2)
    // -4*(8+100-98)+3
    // 3*(-4*3+13)/(2-1)
    // 2+(4*5+1)*8+7*4+10-9+3+1*9-(6-0*4*4)
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while ((s = reader.readLine()) != null) {
        	// List 存放后缀表达式
            List<String> list = new ArrayList<>();
            // 定义操作符栈stack,用于存放操作符 + - * / ( {
            Stack<Character> stack = new Stack();
            for (int i = 0; i < s.length(); i++) {
            	// 定义一个字符,记录字符串当年循环的变量
                char c = s.charAt(i);
//                System.out.println("c = "+ c);
                if (isNum(c)) {
                    int start = i;                    
                    if (i == s.length() - 1) {
                        i++;
                    } else {
                    	
                        while (isNum(s.charAt(++i))) {    
	                        if(i == s.length()-1) {
	                        		i++;
	                        		break;
	                        	}                    	
                        }
                    }
//                    System.out.println(s.substring(start, i));
                    list.add(s.substring(start, i));
                    i--;
                } else if (c == '(' || c == '[' || c == '{') {
                    stack.push(c);
//                    System.out.println(stack.toString());
                } else if (c == ')' || c == ']' || c == '}') {
                    //  一直出栈直到遇到左括号
                    while (stack.peek() != '(' && stack.peek() != '[' && stack.peek() != '{') {
                        list.add(String.valueOf(stack.pop()));
                    }
                    stack.pop();
//                    System.out.println(stack.toString());
                } else if (c == '-') {
                    if ((i != 0 && (isNum(s.charAt(i - 1)) && isNum(s.charAt(i + 1)))) || (s.charAt(i - 1) == ')' || s.charAt(i - 1) == ']' || s.charAt(i - 1) == '}') || (s.charAt(i + 1) == '(' || s.charAt(i + 1) == '[') || s.charAt(i + 1) == '{') {
                        // 减号
                        while (!greaterThan(c, stack)) {
                            list.add(String.valueOf(stack.pop()));
                        }
                        stack.push(c);
//                        System.out.println(stack.toString());
                    } else {
                        // 负号
                        int start = i;
                        while (isNum(s.charAt(++i))) {
                        }
                        list.add(s.substring(start, i));
                        i--;
                    }
                } else if (c == '+') {
                    while (!greaterThan(c, stack)) {
                        list.add(String.valueOf(stack.pop()));
                    }
                    stack.push(c);
//                    System.out.println(stack.toString());
                } else if (c == '*' || c == '/') {
                    while (!greaterThan(c, stack)) {
                        list.add(String.valueOf(stack.pop()));
                    }
                    stack.push(c);
//                    System.out.println(stack.toString());
                }
            }
//            System.out.println(stack.toString());
            while (!stack.isEmpty()) {
                list.add(String.valueOf(stack.pop()));
            }
//            System.out.println("list  "+ list.toString());
            System.out.println(calculate(list));
        }
    }
 
    public static boolean isNum(char c) {
        return c >= '0' && c <= '9';
    }
 
    // 比较运算符与栈顶运算符的优先级
    public static boolean greaterThan(char c, Stack<Character> stack) {
        if (stack.isEmpty()) {
            return true;
        } else {
            char c1 = stack.peek();
            if (c == '*' || c == '/') {
                return !(c1 == '*' || c1 == '/');
            } else {
                return c1 == '(' || c1 == '{' || c1 == '[';
            }
        }
    }
 
    public static int calculate(List<String> list) {
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            int n1;
            int n2;
            switch (s) {
                case "*":
                    n1 = stack.pop();
                    n2 = stack.pop();
//                    System.out.println(" n1*n2  "+n1*n2);
                    stack.push(n1 * n2);
                    break;
                case "/":
                    n1 = stack.pop();
                    n2 = stack.pop();
//                    System.out.println("n1/n2  "+n1/n2);
                    stack.push(n2 / n1);
                    break;
                case "+":
                    stack.push(stack.pop() + stack.pop());
                    break;
                case "-":
                    n1 = stack.pop();
                    n2 = stack.pop();
//                    System.out.println("n1-n2  "+(n1-n2));
                    stack.push(n2 - n1);
                    break;
                default:
//                	System.out.println("Integer.parseInt(s)  "+Integer.parseInt(s));
                    stack.push(Integer.parseInt(s));
            }
        }
        return stack.pop();
    }
 
}

8、完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。

它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。

给定函数count(int n),用于计算n以内(含n)完全数的个数。计算范围, 0 < n <= 500000

返回n以内完全数的个数。 异常情况返回-1

/**

  • 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。

  • 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

  • 例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。

  • 给定函数count(int n),用于计算n以内(含n)完全数的个数

  • @param n 计算范围, 0 < n <= 500000

  • @return n 以内完全数的个数, 异常情况返回-1

*/

public static int count( int n)

输入描述:
输入一个数字

输出描述:
输出完全数的个数

示例1
输入
1000
输出
3

import java.io.*;
 
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        while((str = br.readLine())!=null){
            System.out.println(count(Integer.valueOf(str)));
        }
    }
     
    public static int conut2(int n){
        if(n<6){
            return 0;
        } else if(n<28){
            return 1;
        }else if(n<496){
            return 2;
        } else if(n<8128){
            return 3;
        } else if(n<33550336){
            return 4;
        } else {
            return -1;
        }
    }
     
    public static int count(int n){
        int result = 0;
        /**
         * 从1开始遍历,两层for循环,一层遍历,二层计算当前数的所有真因子的和。
         * 一个完美数除了自身以外最大的约数=自身的一半。比如28除了自身以外,最大的约数为14。
         * 
         */
        for(int i =1;i<n;i++){
            int sum = 0;
            
            for(int j=1;j<=i/2;j++){
                if(i%j==0){
                    sum += j;
                }
            }
            if(sum == i){
                result ++;
                System.out.println(i);
            }
        }
        return result;
    }
}

9、把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

输入

每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。

样例输入

7 3

样例输出

8

/**

  • 计算放苹果方法数目

  • 输入值非法时返回-1

  • 1 <= m,n <= 10

  • @param m 苹果数目

  • @param n 盘子数目数

  • @return 放置方法总数

*/

public static int count(int m, int n)

输入描述:
输入两个int整数

输出描述:
输出结果,int型

示例1
输入
7 3
输出
8

import java.io.*;
/*
放苹果分为两种情况,一种是有盘子为空,一种是每个盘子上都有苹果。
令(m,n)表示将m个苹果放入n个盘子中的摆放方法总数。
1.假设有一个盘子为空,则(m,n)问题转化为将m个苹果放在n-1个盘子上,即求得(m,n-1)即可
2.假设所有盘子都装有苹果,则每个盘子上至少有一个苹果,即最多剩下m-n个苹果,问题转化为将m-n个苹果放到n个盘子上
即求(m-n,n)
*/
public class Main{
    public static void main(String[] arg) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str; 
        while((str=br.readLine())!=null){
            int M = Integer.parseInt(str.split(" ")[0]);
            int N = Integer.parseInt(str.split(" ")[1]);
            int num = fun(M,N);
            System.out.println(num);
        }

    }
    private static int fun(int m,int n){
        if(m==0||n==1){//一个盘子或者0个苹果的情况下,只有一种分法
            return 1;
        }else if(m<n){//盘子比苹果多的情况,
            return fun(m,m);
        }else{
        	//有1个盘子为空的情况下,m个苹果在n-1个盘子中的放法;
            //没有盘子为空,所以每个盘子中至少有一个苹果,所以是m-n个苹果,在n个盘子中的放法
            return fun(m-n,n)+fun(m,n-1);
        }
    }
}

10、请实现如下接口

public static int findNumberOf1( int num)

{

/* 请实现 */

return 0;

} 譬如:输入5 ,5的二进制为101,输出2

涉及知识点:

注意多组输入输出!!!!!!
输入描述:
输入一个整数

输出描述:
计算整数二进制中1的个数

示例1
输入
5
输出
2

import java.io.*;
public class Main{
    static public void main(String [] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str =null;
        while((str=br.readLine())!=null){
            Integer num = Integer.parseInt(str);
            String s = Integer.toBinaryString(num);
            int x=0;
            for(char c : s.toCharArray()){
                if(c=='1')
                    x++;
            }
            System.out.println(x);
        }
        
    }
}

有6条配置命令,它们执行的结果分别是:

命 令执 行
resetreset what
reset boardboard fault
board addwhere to add
board deleteno board at all
reboot backplaneimpossible
backplane abortinstall first
he heunknown command

注意:he he不是命令。

为了简化输入,方便用户,以“最短唯一匹配原则”匹配:
1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;
2、若只输入一字串,但本条命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,但是该命令有两个关键词,所有匹配失败,执行结果为:unknown command
3、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果仍不唯一,匹配失败。例如输入:r b,找到匹配命令reset board 和 reboot backplane,执行结果为:unkown command。

4、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果唯一,匹配成功。例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。
5、若输入两字串,第一关键字匹配成功,则匹配第二关键字,若无匹配,失败。例如输入:bo a,确定是命令board add,匹配成功。
6、若匹配失败,打印“unknown command”

输入描述:
多行字符串,每行字符串一条命令

输出描述:
执行结果,每条命令输出一行

示例1
输入
reset
reset board
board add
board delet
reboot backplane
backplane abort
输出
reset what
board fault
where to add
no board at all
impossible
install first


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可持续化发展

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值