蓝桥杯练习题(算法训练)

那年仲夏 提交于 2019-12-10 21:37:04
问题描述
  对于给定整数数组a[],寻找其中最大值,并返回下标。
输入格式
  整数数组a[],数组元素个数小于1等于100。输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。
输出格式
  输出最大值,及其下标
样例输入
3
3 2 1

样例输出

3 0
import java.util.Scanner;

public class Demo4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];

        for(int i = 0; i < arr.length; i++){
            arr[i] = sc.nextInt();
        }

        System.out.print(max(arr) + " ");
        System.out.print(max_sub(arr));
    }

    public static int max(int[] a){
        int max = a[0];
        for (int value : a) {
            if (max < value) {
                max = value;
            }
        }
        return max;
    }

    public static int max_sub(int[] a){
        int max = a[0];
        int max_sub = 0;
        for(int i = 0; i < a.length; i++){
            if(max < a[i]){
                max = a[i];
                max_sub = i;
            }
        }
        return max_sub;
    }
}

从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。
样例输入: 5 3 4 0 0 2样例输出:9  1
样例输入: 73 2 7 5 2 9 1样例输出:29  4
import java.util.Arrays;
import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];

        for(int i = 0; i < n; i++){
            arr[i] = sc.nextInt();
        }

        System.out.print(Arrays.stream(arr).sum() + " ");
        System.out.println((int)Arrays.stream(arr).average().orElse(0));
    }
}
问题描述
  编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。
  输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。
  输出格式:输出经过转换后的字符串。
输入输出样例
样例输入
AeDb
样例输出
aEdB
 
import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        /*
        *       toLowerCase();//转成小写
        *       toUpperCase();//转成大写
        */
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        for (int i = 0; i < s.length(); i++) {
            //Character类包装一个对象中的基本类型char的值。
            //isUpperCase--确定指定的字符是否为大写字符。
            if (Character.isUpperCase(s.charAt(i))) {
                System.out.print(Character.toLowerCase(s.charAt(i)));
            } else {
                System.out.print(Character.toUpperCase(s.charAt(i)));
            }
        }
    }
}

 

编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为:

  要求:(1)定义一个结构体类型来描述复数。
  (2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。
  (3)必须使用结构体指针的方法把函数的计算结果返回。
  说明:用户输入:运算符号(+,-,*,/) a b c d.
  输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。

输入:
  - 2.5 3.6 1.5 4.9
输出:
  1.00+-1.30i

 

import java.util.Scanner;

public class Demo5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char n1 = sc.next().charAt(0);
        double n2 = sc.nextDouble();
        double n3 = sc.nextDouble();
        double n4 = sc.nextDouble();
        double n5 = sc.nextDouble();
        /*
        *       复数的四则运算:
        *               加法:(a+bi) + (c+di) = (a+c) + (b+d)i
        *               减法:(a+bi) - (c+di) = (a-c) + (b-d)i
        *               乘法:(a+bi) * (c+di) = (ac-bd) + (ad+bc)i
        *               除法:(a+bi) / (c+di) = ((ac+bd) / (c^2+d^2)) + ((bc-ad)i / (c^2+d^2))
        */

        switch(n1){
            case '+':
                System.out.printf("%.2f+%.2fi",(n2 + n4), (n3 + n5));
                break;
            case '-':
                System.out.printf("%.2f+%.2fi",(n2 - n4), (n3 - n5));
                break;
            case '*':
                System.out.printf("%.2f+%.2fi",((n2 * n4) - (n3 * n5)), ((n2 * n5) + (n3 * n4)));
                break;
            case '/':
                System.out.printf("%.2f+%.2fi",((n2 * n4) + (n3 * n5)) / ((n4*n4) + (n5*n5)), ((n3 * n4) - (n2*n5)) / ((n4*n4) + (n5*n5)));
                break;
            default:
                break;
        }
    }
}

 

问题描述
  编写一函数lcm,求两个正整数的最小公倍数。
样例输入
一个满足题目要求的输入范例。
例:

3 5
样例输出
与上面的样例输入对应的输出。
例:

数据规模和约定
  输入数据中每一个数的范围。
  例:两个数都小于65536。
 
import java.math.BigInteger;
import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigInteger a = sc.nextBigInteger();
        BigInteger b = sc.nextBigInteger();
        BigInteger gcd = a.gcd(b);

        /*
        *       divide 除
        *       multiply 乘
        */
        System.out.println(a.multiply(b).divide(gcd));
    }
}

 

问题描述
  输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。例如15,那么从1到15之中,一共出现了8个1。
输入格式
  一个正整数n
输出格式
  一个整数,表示1出现的资料
样例输入
15
样例输出
8
数据规模和约定
  n不超过30000
 
import java.util.Scanner;

public class Demo6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int sum = 0;
        for(int i = 0; i <= n; i++){
            if(i < 10){
                if(i == 1){
                    sum++;
                }
            }
            if(i >= 10 && i < 100){
                if(i / 10 % 10 == 1){
                    sum++;
                }
                if((i % 10) == 1){
                    sum++;
                }
            }
            if(i >= 100 && i < 1000){
                if(i / 100 % 10 == 1){
                    sum++;
                }
                if(i / 10 % 10 == 1){
                    sum++;
                }
                if((i % 10) == 1){
                    sum++;
                }
            }
            if(i >= 1000 && i < 10000){
                sum = getSum(sum, i);
            }
            if(i >= 10000 && i <= 30000){
                if(i / 10000 % 10 == 1){
                    sum++;
                }
                sum = getSum(sum, i);
            }
        }
        System.out.println(sum);
    }

    private static int getSum(int sum, int i) {
        if(i / 1000 % 10 == 1){
            sum++;
        }
        if(i / 100 % 10 == 1){
            sum++;
        }
        if(i / 10 % 10 == 1){
            sum++;
        }
        if((i % 10) == 1){
            sum++;
        }
        return sum;
    }

    public static void code(int a){
        int sum = 0;
        while(a > 0){
            a /= 10;
            sum++;
        }
        System.out.println(sum);
    }
}

 

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!