蓝桥杯(java):数列特征,查找整数,杨辉三角,特殊的数字,回文数

人生无趣,生活不易,一起找点乐子吧。

 

 

数列特征:

问题描述
给出n个数,找出这n个数的最大值,最小值,和。

输入格式
第一行为整数n,表示数的个数。

第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。

输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。

思维还一直处在python里,直接就max(),min()了。查了下,有max函数的是collection,不会用,有会的,评论写下面吧。

import java.util.*;

public class Main {
	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();
		}
		sc.close();
		
		int max = arr[0];
		int min = arr[0];
		int sum = 0;
		for(int i = 0;i<arr.length;i++){
			if(arr[i]>max){
				max = arr[i];
			}
			if(arr[i]<min){
				min = arr[i];
			}
			sum += arr[i];
		}
		System.out.println(max);
		System.out.println(min);
		System.out.println(sum);
		
	}
}

 

循环遍历了一遍,找最大最小值,顺便求了累加,用于求平均。

 

 

查找整数:

问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

输入格式
第一行包含一个整数n。

第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。

第三行包含一个整数a,为待查找的数。

输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。

这个貌似也没有说的点,交给python的话直接list.find(int)就好了,java只会用数组,如果大家有其他的简单数据结构,下面评论。循环遍历查找,返回下标,循环完未找到,立个flag做个标记就好。

import java.util.*;

public class Main {
	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();
		}
		int a = sc.nextInt();
		sc.close();
		
		int state = 0;
		for(int i = 0;i<arr.length;i++){
			if(arr[i] == a){
				System.out.println(i+1);
				state = 1;
				break;
			}
		}
		
		if(state == 0){
			System.out.println(-1);
		}
		
	}
}

 

 

杨辉三角:

问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

  
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

  
下面给出了杨辉三角形的前4行:

  
   1

  
  1 1

  
 1 2 1

  
1 3 3 1

  
给出n,输出它的前n行。

输入格式
输入包含一个数n。

输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。

数据规模在34以下,做个34*34的数组存储就好了,前两行的数据手动写出,剩下的由计算给出,数组生成后,循环遍历输出每行即可。

import java.util.*;

public class Main {
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		
		int list[][] = new int[34][34];
		list[0][0] = 1;
		list[1][0] = 1;
		list[1][1] = 1;
		for (int i = 3;i<=34;i++){
			list[i-1][0] = 1;
			for(int j = 1;j<=i-2;j++){
				list[i-1][j] = list[i-2][j] + list[i-2][j-1];
			}
			list[i-1][i-1] = 1;
		}
		
		for(int i = 0;i<n;i++){
			for(int j = 0;j<=i;j++){
				System.out.printf(list[i][j] + " ");
			}
			System.out.println();
		}
	}
		
}

没什么难的东西,就是麻烦,计算的时候别把下标算错就好。

 

 

特殊的数字:

问题描述
  153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
输出格式
  按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。

题目很简单,数据范围为三位十进制数,也就是说从100到999.需要做的就是判断数字的每位数字的立方和是不是等于原数值而已,代码的核心点是怎样把数字的每一位一个个取出来。记住一个蠢方法,如果除法解决不了,就用取余。比如取出百位数字:num/100,取出个位数字num%10,十位数字就别想了,等于num – 百位数字x100 – 个位数字(如果非要想的话(num/10)%10 )。完,可以了,还有一种方法,先把数字当成字符串来处理,将每个字符取出,然后再转换成数字。这种方法用python很好实现,java也并不难,可以尝试下。

示例代码:

import java.util.*;

public class Main {
	public static void main(String args[]){
		int a,b,c;
		for(int i = 100;i<1000;i++){
			a = i/100;
			b = (i/10)%10;
			c = i%10;
			if(a*a*a+b*b*b+c*c*c == i){
				System.out.println(i);
			}
		}
	
	
	}
}

 

回文数:

问题描述
  1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
  按从小到大的顺序输出满足条件的四位十进制数。

这个问题一开始会怎样考虑,还是把数字一个个取出来吗,但是此问题我们需要做的是将数字倒过来,其实并没有什么逻辑上的计算,因此,考虑上道题我说的那个方法,把数字当成字符串,将字符串倒置,来比较倒置前后是否相同,相同就输出。

字符串的倒置有方法吗?有,需要个中介StringBuilder(),StringBuilder的reverse方法可以将参数倒置,他的toString方法可以把StringBuilder对象转回String。那就很简单了:

public class Main {
	public static void main(String args[]){
		String s;
		for(int i = 1000;i<10000;i++){
			s = ""+i;
			if(new StringBuilder(s).reverse().toString().equals(s)){
				System.out.println(i);
			}
		}
	
	}
}

 

ok,写完了吧。

java笔记只写一点:

1、将字符串s倒置:new StringBuilder(s).reverse().toString()

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/qq_41500251/article/details/84993385
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞