1.求数组的平均值,实现一个方法 avg, 以数组为参数, 求数组中所有元素的平均值(注意方法的返回值类型).
public static double avg(int[] array){
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
return sum*1.0/array.length;
}
public static void main(String[] args) {
int[] array = new int[] {1,2,3,4,5,6,7,8};
System.out.println(avg(array));
}
2.数组所有元素之和,实现一个方法 sum, 以数组为参数, 求数组所有元素之和.
public static double sum(int[] array){
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
return sum;
}
public static void main(String[] args) {
int[] array = new int[]{1,2,3,4};
System.out.println(sum(array));
}
3.改变原有数组元素的值,实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上. 例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}
public static int[] transform(int[] array) {
int[] tmp = new int[array.length];
for (int i = 0; i < array.length; i++) {
tmp[i] = array[i]*2;
}
return tmp;
}
public static void main(String[] args) {
int[] array = new int[] {1,2,3};
System.out.println("交换之前:"+Arrays.toString(array));
int[] tmp = transform(array);
System.out.println("交换之后:"+Arrays.toString(tmp));
}
4.打印数组,实现一个方法 printArray, 以数组为参数, 循环访问数组中的每个元素, 打印每个元素的值.
public static void printArray(int[] array){
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
public static void main(String[] args) {
int[] array = new int[] {1,2,3,4};
printArray(array);
}
5.创建的数组,并且赋初始值,创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100
public static void main(String[] args) {
int[] array = new int[100];
for (int i = 0; i < array.length; i++) {
array[i] = i + 1;
}
System.out.println(Arrays.toString(array));
}
6.数组的拷贝,实现一个方法 copyOf, 对一个整型数组进行拷贝, 得到一个新的数组.
public static int[] copyOf(int[] array){
int[] arrayTmp = new int[array.length];
for (int i = 0; i < array.length; i++) {
arrayTmp[i] = array[i];
}
return arrayTmp;
}
public static void main(String[] args) {
int[] array1 = new int[]{1,2,3,4};
int[] array2 = copyOf(array1);
System.out.println(Arrays.toString(array2));
}
7.数组转字符串,实现一个方法 toString, 把一个整型数组转换成字符串. 例如数组 {1, 2, 3} , 返回的字符串为 "[1, 2, 3]", 注意 逗号 的位置和数量.
public static void main(String[] args) {
int[] array = new int[]{1,2,3,4};
System.out.println(Arrays.toString(array));
}
8.二分查找,给定一个有序整型数组, 实现二分查找
//利用工具包实现
public static void main(String[] args) {
int[] array = new int[] {1,45,78,99,234};
int index = Arrays.binarySearch(array,99);
if(index == -1){
System.out.println("找不到!!!");
}else{
System.out.println("找到了,下标为:"+index);
}
}
public static int binarySearch(int[] arr, int key){
int left = 0;
int right = arr.length-1;
while(left < right){
int mid = (left + right) / 2;
if(arr[mid] < key){
left = mid + 1;
}else if(arr[mid] == key){
return mid;
}else{
right = mid - 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = new int[] {1,45,78,99,234};
int index = binarySearch(array,99);
if(index == -1){
System.out.println("没找到!!!");
}else{
System.out.println("找到了,下标为:"+index);
}
}
9.数组是否有序,给定一个整型数组, 判定数组是否有序(递增)
public static boolean func(int[] array){
for (int i = 0; i < array.length-1; i++) {
if (array[i] > array[i+1]){
return false;
}
}
return true;
}
public static void main(String[] args) {
int[] array = new int[] {1,2,3,98,5};
boolean tmp = func(array);
if(tmp){
System.out.println("有序!!!");
}else{
System.out.println("无序!!!");
}
}
10.冒泡排序,给定一个整型数组, 实现冒泡排序(升序排序)
//利用工具包实现
public static void main(String[] args) {
int[] array = new int[]{1,34,5,67,9};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
}
public static void bubbleSort(int[] arr){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
public static void main(String[] args) {
int[] array = new int[]{1,34,5,67,9};
System.out.println("排序之前的数组:"+Arrays.toString(array));
bubbleSort(array);
System.out.println("排序之后的数组:"+Arrays.toString(array));
}
11.只出现一次的数字,给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
//本题考察异或:异或的特点是:1、n^n = 0;即两个相同的数字异或是0 2、0^n=n;即0和任何数字进行异或,结果就是那个任何数字。
public static int findOne(int[] arr){
int ret = 0;
for (int x: arr) {
ret ^= x;
}
return ret;
}
public static void main(String[] args) {
int[] array = new int[] {4,1,2,1,2};
System.out.println(findOne(array));
}
12.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
public static void main(String[] args) {
for (int i = 1; i <= 1000; i++) {
int sum = 0; //因子和
for (int j = 1; j <= i/2; j++) {
if (i % j == 0){
sum += j;
}
}
if (sum == i){
System.out.println(i + "是完数");
}
}
}
13.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
public static void main(String[] args) {
int i = -100;//其实范围还可以精确[-100,27956),通过解方程得出
while(i < 27956){
double a = Math.sqrt(100 + i); //Math.sqrt默认类型是double
double b = Math.sqrt(168 + 100 + i);
if (a == (int)a && b == (int)b){
System.out.println("该数为"+i);
}
i++;
}
}
public static void main(String[] args) {
for (int i = -100; i < 27956; i++) {
int a = (int) Math.sqrt(i + 100); //Math.sqrt默认类型是double,所以要做强制类型转换
int b = (int) Math.sqrt(i + 100 + 168);
if ((a * a == i + 100) && (b * b == i + 268)){
System.out.println(i);
}
}
}
14.输入两个正整数m和n,求其最大公约数和最小公倍数。
//法一:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int max = m > n ? m : n;
while(true){
if((max % m == 0) && (max % n == 0)){
System.out.println("最小公倍数:"+ max);
break;
}
max++;
}
System.out.println("最大公约数:"+ m*n/max);
}
//法二:分开求最小公倍数和最大公约数
public static void Lcm(int a,int b){
for (int i = 1; ; i++) {
if ((i*a) % b == 0){
System.out.println("最小公倍数:"+ i*a);
break;
}
}
}
public static void Gcd(int a, int b){
int c = a % b;
while(c != 0){
a = b;
b = c;
c = a % b;
}
System.out.println("最大公约数:"+ b);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
Lcm(m,n);
Gcd(m,n);
}
15.一球从h米高度自由落下,每次落地后反跳回原高度的一半再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请给h赋值:");
double h = sc.nextDouble();
System.out.println("请给n赋值:");
int n = sc.nextInt();
double s = 0.0;//总路程
double h1 = 0.0;//反弹的高度
for (int i = 1; i <= n; i++) {
h1 = h / 2;
s = s + h + h1;
h = h1;
}
System.out.println("第" + n + "次反弹" + h1 + "米");
System.out.println("共走了" + s + "米");
}