Practice| 数组
- /*
- 从键盘确定班级的组号,在从键盘输入每一组的人数,并输入每一个学员的成绩,并求出,每一组的平均分,
- 全部的平均分,每一组的最高分,全部的最高分,并显示结果.
- */
- class Test3{
- public static void main(String[] args){
- java.util.Scanner input = new java.util.Scanner(System.in);
- //先确定一共有多少个组;
- System.out.print("请输入一共有多少个组:");
- int groups = input.nextInt();
- int[][] scores = new int[groups][]; //如5个组,+ 人数
- //遍历输入每个组的人数
- for(int i = 0;i < scores.length;i++){
- System.out.print("请输入第" + (i+1) +"组的人数:");
- int num = input.nextInt();
- scores[i] = new int[num]; //确定每 i 行的列数 <==> 相当于一维数组;
- }
- //遍历scores二维数组,输入成绩即填充列数,默认值为0 ;
- for(int i = 0; i < scores.length;i++){
- for(int j = 0;j < scores[i].length;j++){
- System.out.print("请输入第"+ (i+1) +"组" + "第"+ (j+1) + "个学员的成绩:");
- int score = input.nextInt();
- scores[i][j] = score;
- }
- System.out.println();
- }
- //每个组和班级的平均分
- int sumAll = 0;
- int countAll = 0;
- for(int i = 0; i < scores.length;i++){
- int sumGroup = 0; //每循环一次就会赋0 -->可求出每组的成绩
- int countGroup = 0;
- for(int j = 0;j < scores[i].length;j++){
- sumAll += scores[i][j];
- countAll++;
- sumGroup += scores[i][j];
- countGroup++;
- }
- System.out.println("第" + (i+1) + "组的总分为:" + sumGroup + "\t" + "第" + (i+1) + "组的平均分为:" + sumGroup/countGroup);
- }
- System.out.println("全班总分为:" + sumAll + "\t" + "全班平均分为:" + sumAll/countAll);
- //求每个组和班级的最高分
- int max_ban = 0;
- for(int i = 0;i < scores.length;i++){
- int max_zu = 0;
- //int max_ban = 0;
- for(int j = 0;j < scores[i].length;j++){
- if(scores[i][j] > max_zu){
- max_zu = scores[i][j];
- }
- if(scores[i][j] > max_ban){
- max_ban = scores[i][j];
- }
- }System.out.println("第" + (i+1) + "组的最高分为:" + max_zu);
- }System.out.println("全班最高分为:" + max_ban);
- }
- }
数组的复制
- /*
- (1)已知一个数组存储了成绩
- int[] scores = {67,89,23,45,99};
- 要让你把,所有不及格的成绩找出来,放到一个数组中
- 结果:{23,45}
- (1)先统计不及格的有几个人,count个
- (2)新建数组 int[] low = new int[count];
- (3)再遍历scores,把不及格的复制到low数组中
- */
- class ArrayCopy{
- public static void main(String[] args){
- int[] scores = {67,89,23,45,99};
- int count = 0;
- for(int i = 0;i < scores.length; i++){
- if(scores[i] < 60){
- count++;
- }
- }
- int[] low = new int[count];
- for(int i = 0,j = 0; i < scores.length && j<count; i++){ //&& j<count不写也可以不会超范围;
- if(scores[i] < 60){
- //j = i;//i=2, 3
- low[j] = scores[i]; //这里是关键啊啊
- j++;
- }
- }
- //for(int i = 0;i<low.length;i++){
- //System.out.println(low[i]);
- //}
- for(int num : low){
- System.out.print("不及格的有:" + num + "\n");
- }
- }
- }
二分查找(前提是有顺序的)
使用二分查找算法查找字符串数组中 {"a","b","c","d","e","f","g","h"} g的元素。
- * String类型:
- * (1)重写了equals方法
- * (2)实现了java.lang.Comparable接口
- * 这个接口的抽象方法 int compareTo(String str)
- */
- public class Test19 {
- public static void main(String[] args) {
- String[] arr = {"a","b","c","d","e","f","g","h"};
- String find = "g";
- int left = 0;
- int right = arr.length-1;
- int mid = (left + right)/2;
- int index = -1;
- while(left<=right){
- if(arr[mid].equals(find)){
- index = mid;
- break;
- }else if(find.compareTo(arr[mid])>0){//find比arr[mid]大,去mid的右边查找
- left = mid +1;
- }else{
- right = mid - 1;
- }
- mid = (left + right)/2;
- }
- System.out.println("g的下标是:" +index);
- }
- }
- //二分法
- class BinarySearch{
- public static void main(String [] args){
- int[] arr = {0,1,2,5,8,9,12,17,20};
- //int[] arr = {1,2,5,8,9,12,17,20};
- int index = -1;
- int find = 5;
- int left = 0;
- int right = arr.length - 1;
- int mid = (left + right) /2;
- while(left <= right){ //left left left left
- if(arr[mid] == find){//找到了
- index = mid;
- break;
- }else if(find < arr[mid]){//说明find在[mid]的左边
- right = mid-1;
- }else{//说明find在[mid]的右边
- left = mid + 1;
- }
- mid = (left + right)/2;
- }
- if(index==-1){
- System.out.println("未找到");
- }else{
- System.out.println("下标:" + index);
- }
- }
- }
冒泡排序(把大的往右边移动-下沉;把小的往左移动-冒泡)
- /*
- 冒泡排序:
- 从小到大
- //1、先照我这个写
- //2、如果我要求,每一轮从最后一个元素开始比较
- //我刚才,相当于把“大”往“右”移动
- //现在,把“小”往“左”移动
- /*
- 冒泡排序:实现从小到大
- (1)方法一:把“大”往“右”移动,称为“下沉”
- (2)方法二:把“小”往“左”移动,称为“冒泡”
- */
- class BubbleSort{
- public static void main(String[] args){
- int[] arr = {3,9,4,2,1,8,6}; //6
- //从小到大:通过相邻元素的比较, 大的往后移动称为 下沉;
- for(int i = 1;i < arr.length-1;i++ ){
- for(int j = 0;j < arr.length-1;j++){
- if(arr[j] > arr[j+1]){
- int temp = 0;
- temp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = temp;
- }
- }
- }for(int i = 0; i < arr.length; i++){
- System.out.print(arr[i] + "\t");
- }
- }
- }
- ---->>>
- 1 2 3 4 6 8 9
- class BubbleSort{
- public static void main(String[] args){
- int[] arr = {3,9,4,2,1,8,6}; //6
- //从小到大:把 小 的往 左 移动;称为"冒泡"。
- for(int i = 0; i < arr.length;i++){
- for(int j = arr.length-1; j > i;j--){
- if(arr[j] < arr[j-1]){ //如果后边的arr[j] < 前边的arr[j-1]
- int temp = 0;
- temp = arr[j-1];
- arr[j-1] = arr[j];
- arr[j] = temp;
- }
- }
- }for(int i = 0;i < arr.length;i++){
- System.out.print(arr[i] + "\t");
- }
- }
- }
- ---->>>
1 2 3 4 6 8 9
- package com.atguigu.exam;
- import java.util.Arrays;
- public class Test20 {
- public static void main(String[] args) {
- int[] array = {4,3,6,1};
- sort(array);
- System.out.println(Arrays.toString(array));
- }
- public static void sort(int[] arr){
- //轮数:n-1
- for (int i = 1; i < arr.length; i++) {
- //每一轮从左往右比较
- /*
- * 当i=1,j=0,1,2,...arr.length-2 j<arr.length-i
- */
- for (int j = 0; j < arr.length-i; j++) {
- if(arr[j] > arr[j+1]){
- int temp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = temp;
- }
- }
- }
- }
- }
直接选择排序
- /*
- 直接选择排序-->>
- 思路:
- 每一轮找出本轮未排序元素中的最小值,然后和它应该在的位置的元素交换
- 例如:
- 第一轮:最小值是1,它的位置[4],它应该在[0],[4]和[0]位置元素交换 {1,2,7,9,4,6}
- 第二轮:最小值是2,它的位置[1],它应该在[1],不动 {1,2,7,9,4,6}
- 第三轮:最小值是4,它的位置[4],它应该在[2],[4]和[2]位置元素交换 {1,2,4,9,7,6}
- 第四轮:最小值是6,它的位置[5],它应该在[3],[5]和[3]位置元素交换 {1,2,4,6,7,9}
- 第五轮:最小值是7,它的位置[4],它应该在[4],不动
- */
- class TestSelectSort{
- public static void main(String[] args){
- int[] arr = {4,2,7,9,1,6};
- //外循环:5轮
- //i的循环值:0,1,2,3,4 i<arr.length-1
- for(int i = 0; i <arr.length-1;i++){
- //找出本轮的最小值及其下标
- //(1)先假设“本轮未排序部分”的第一个元素最小
- int min = arr[i];
- int index = i;
- //(2)用min 和 "剩余的元素" 进行比较,确定本轮的最小值; 从i+1开始比较,到最后;
- /*
- 第一轮:未排序部分 [0,5],min=arr[0],index=0,j=1,2,3,4,5
- 第二轮:未排序部分 [1,5],min=arr[1],index=1,j=2,3,4,5
- 第三轮:未排序部分 [2,5],min=arr[2],index=2,j=3,4,5
- 第四轮:未排序部分 [3,5],min=arr[3],index=3,j=4,5
- 第五轮:未排序部分 [4,5],min=arr[4],index=4,j=5
- */
- for(int j = i+1; j < arr.length; j++){
- if(min > arr[j]){
- min = arr[j];
- index = j;
- }
- }
- //(3)把[index]位置的元素和它应该在的位置交换
- /*
- 第一轮,最小值应该在[0],第一轮i=0
- 第二轮,最小值应该在[1],第一轮i=1
- 第三轮,最小值应该在[2],第一轮i=2
- 第四轮,最小值应该在[3],第一轮i=3
- 第五轮,最小值应该在[4],第一轮i=4
- */
- if(index != i){ //如果arr[index],即本轮的最小值,不在它应该在的位置[i],就要交换
- int temp = arr[index];
- arr[index] = arr[i];
- arr[i] = temp;
- }
- }
- for(int num : arr){
- System.out.print(num); //
- }
- }
- }
Practice| 数组的更多相关文章
- PAT (Basic Level) Practice 1008 数组元素循环右移问题
个人练习 一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN ...
- PAT (Basic Level) Practice 1008 数组元素循环右移问题 分数 20
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN ...
- PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808 #include <iost ...
- 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...
- ConCurrent in Practice小记 (1)
ConCurrent in Practice小记 (1) 杂记,随书自己写的笔记: 综述问题 1.线程允许在同一个进程中的资源,包括共享内存,内存句柄,文件句柄.但是每个进程有自己的程序计数器,栈和局 ...
- C++类实现三维数组算法
在学习北京大学教授的<程序设计实习 / Practice on Programming>中,遇到了一个习题,花了很长时间研究,现在分享出来: 课题地址:https://class.cour ...
- Java RGB数组图像合成 ImageCombining (整理)
/** * Java RGB数组图像合成 ImageCombinning (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * 注意事项: * 1.本程序为java程序,同时感谢您花费 ...
- 双数组Trie树 (Double-array Trie) 及其应用
双数组Trie树(Double-array Trie, DAT)是由三个日本人提出的一种Trie树的高效实现 [1],兼顾了查询效率与空间存储.Ansj便是用DAT(虽然作者宣称是三数组Trie树,但 ...
- java对象数组的概述和使用
1 public class Student 2 { 3 // 成员变量 4 private String name; 5 private int age; 6 7 // 构造方法 8 public ...
随机推荐
- JMeter 中_time 函数的使用(时间戳、当前时间)
有时在接口测试时,其参数需要为时间戳或者是日期格式的数据.针对此问题,可以使用JMeter自带的_time 函数来解决以上问题 操作步骤: 1.通过函数助手,生成一个_time 函数: 2.如果参数为 ...
- CodeCraft-19 and Codeforces Round #537 (Div. 2) 题解
传送门 D. Destroy the Colony 首先明确题意:除了规定的两种(或一种)字母要在同侧以外,其他字母也必须在同侧. 发现当每种字母在左/右边确定之后,方案数就确定了,就是分组的方案数乘 ...
- 判断js数据类型的四种方法,以及各自的优缺点(转)
转载地址:https://blog.csdn.net/lhjuejiang/article/details/79623973 数据类型分为基本类型和引用类型: 基本类型:String.Number.B ...
- mybatis 按in 函数参数顺序排序
使用 FIELD()函数 SELECT * FROM user WHERE id IN (72, 80, 69) ORDER BY FIELD(id, 72, 80, 69)
- Linux下的启动oracle的EM的命令
Linux下的启动oracle的EM的命令 1.启动数据库 su - oracle $sqlplus / as sysdba sql>startup 2.启动监听 $lsnrctl LSNRCT ...
- Confluence 6 禁用管理员联系表单
如果你希望禁用这个功能,不允许用户通过发送电子邮件的方式联系站点管理员.你可以禁用这个页面中有关输入用户信息发送电子邮件的部分.你只能禁用用户电子邮件输入表单,如果你按照上面描述的步骤在 'Custo ...
- Confluence 6 编辑一个站点装饰文件
希望编辑一个站点的 decorator 文件: 进入 > 基本配置(General Configuration) > 布局(Layouts )(在Look and Feel 菜单下面) ...
- spring mvc底层(DispacherServlet)的简单实现
使用过spring mvc的小伙伴都知道,mvc在使用的时候,我们只需要在controller上注解上@controller跟@requestMapping(“URL”),当我们访问对应的路径的时候, ...
- k倍区间
看大佬的代码看了半天,终于算是懂了 标题: k倍区间 给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就 ...
- BeautifulSoup的基本用法
# -*- coding:UTF-8 -*- from urllib import request from bs4 import BeautifulSoup import re import sys ...