首页 > 编程语言 >java练习

java练习

时间:2024-10-24 23:44:00浏览次数:5  
标签:java int 练习 list ++ length str

代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;

public class T08 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] a = new int[n];
        int[] b = new int[n];
        in.nextLine();
        if (n % 10 == 0) {
            for (int i = 0; i < n; i++) {
                String str = in.nextLine();  //输入数和代价
                str = str.replace(" ", "");
                a[i] = Integer.parseInt(String.valueOf(str.charAt(0)));
                if (str.length() == 2) {
                    b[i] = Integer.valueOf(String.valueOf(str.charAt(1)));//char转string转integer
                } else if (str.length() == 3) {
                    str = String.valueOf(str.charAt(1)) + String.valueOf(str.charAt(2));
                    b[i] = Integer.parseInt(str);
                } else if (str == "") {
                    i--;
                    a[i] = 0;
                }
            }

            int q = n / 10;//计算最多出现的次数
            //[[数组a的值,出现次数,多出次数,]]
            int k;
            int l = 0;
            int[][][] c = new int[n][2][n];
            int count = 0;

            for (int i = 0; i < a.length; i++) {

                k = i - 1;//索引在自己前面


                do {//条过了
                    if (i == 0) {
                        break;
                    }//跳过k为-1,i为0,
                    if (a[i] == a[k]) {
                        l = 1;
                    }
                    k -= 1;
                } while (k > 0);
                if (l == 1) {
                    l = 0;
                    continue;
                }//判断是不是第一次出现,不是就跳过

                c[i][0][0] = a[i];
                int m = 0;
                for (int j = i; j < a.length; j++) {
                    if (a[i] == a[j]) {
                        count += 1;
                        c[i][1][m++] = b[j];
                    }
                }
                for (int j = 0; j < a.length; j++) {
                    if (a[i] == a[j]) {

                    }
                }

                c[i][0][1] = count;
                count = 0;
                c[i][0][2] = c[i][0][1] - q;
            }  //统计重复次数


            //复制三维数组
            int[][][] d = new int[n][2][n];
            int o = 0;
            for (int i = 0; i < c.length; i++) {//固定c的索引
                for (int j = 0; j < c.length; j++) {//固定d的索引
                    if (c[i][0][0] == j && c[i][0][1] !=0) {//c的。。值和d的索引相当
                        for (int m = 0; m < c[i][0].length; m++) {//
                            d[j][0][m] = c[i][0][m];
                        }
                        for (int m = 0; m < c[i][1].length; m++) {//
                            d[j][1][m] = c[i][1][m];
                        }
                    }
                }
            }


            int sum = 0;
            for (int i = 0; i <d.length; i++) {
                ArrayList<Integer> list = new ArrayList();
                if (d[i][0][1] > q) {//只有超过最大出现次数的才执行
                    for (int j = 0; j < d[i][1].length; j++) {
                        list.add(d[i][1][j]);//收集单个a的值的代价所有代价
//                        list.remove("0");//去除无意义的
                    }
                    Collections.sort(list);
                    Collections.reverse(list); //单个a的值的代价排序
                    for (int j = list.size(); j >= 0; j--) {
                        if (list.size() > q) {
                            sum += list.get(j - 1);
                            list.remove(j-1);
                        }
                    }
                }
            }
            System.out.println(sum);
        }
    }
}

题目描述:

有一个长度为 n 的数组(n 是 10 的倍数),每个数 ai 都是区间 [0, 9] 中的整数。小明发现数组里每种数出现的次数不太平均,而更改第 i 个数的代价为bi,他想更改若干个数的值使得这 10 种数出现的次数相等(都等于n/10),请问代价和最少为多少。

输入格式:

输入的第一行包含一个正整数 n 。
接下来 n 行,第 i 行包含两个整数 ai , bi ,用一个空格分隔。

输出格式:

输出一行包含一个正整数表示答案。




关键词:java,多维数组

标签:java,int,练习,list,++,length,str
From: https://www.cnblogs.com/used-conduit-onion/p/18501585

相关文章

  • 刷c语言练习题12(牛客网)
    1、在上下文和头文件正常的情况下,以下代码输出的值是:12345678910111213int x = 4;void incre() {    static int x = 1;    x *= x + 1;    printf("%d", x);}int _tmain(int argc, _TCHAR *argv[]) {    int i;......
  • 每日OJ题_牛客_DP10最大子矩阵_二维前缀和_C++_Java
    目录牛客_DP10最大子矩阵_二维前缀和题目解析C++代码Java代码牛客_DP10最大子矩阵_二维前缀和最大子矩阵_牛客题霸_牛客网(nowcoder.com)描述:        已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1*1)子矩......
  • Java锁机制
    synctronized是互斥锁吗?ChatGPTChatGPT是的,synchronized是一种互斥锁机制。在Java中,synchronized关键字用于实现同步机制,确保在多线程环境下对共享资源的访问是安全的。当一个线程进入**synchronized代码块或方法时,它会尝试获取锁。如果锁已经被其他线程持有,那么当前线程将......
  • Java 中回调机制是什么原理
    Java中回调机制的原理:1.回调机制概述;2.接口作为回调的关键;3.事件监听器模式;4.注册和解注册回调对象;5.回调与多线程;6.内置回调机制的例子。回调机制是一种常见的编程范式,特别是在事件驱动编程中。在Java中,回调机制允许一个对象(回调对象)注册在另一个对象(调用对象)上,并在特定......
  • jspm基于Java web的在线餐饮管理系统的设计和实现(11862)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发......
  • Java类和对象详解(上)
    目录前言 一.类和对象的定义1.什么是一个类?2.类的定义格式 3.一个类中应该有什么 4.什么是对象二.类的实例化1.什么是实例化?2.实例化在内存中的使用情况: 三.构造方法(构造器)1.什么是构造方法2. 默认初始化3.this关键字3.1为什么要有this关键字3.2什么是thi......
  • 日语学习《红宝书新日本语能力考试N1·N2·N3·N4·N5文字词汇(详解+练习)》PDF分享
    ​​《红宝书:新日本语能力考试文字词汇(详解+练习)》系列丛书自出版以来,广受好评,成为很多参加能力考试的学习者的必备用书。《红宝书:新日本语能力考试文字词汇(详解+练习)》按新日语能力考试指南和新真题编写,收录词汇量达6300多个:涵盖必须掌握的重点词汇3324个,涵盖重要补充词汇300......
  • 0基础学java之Day14
    Object含义:基类也叫做超类,Object是所有类的祖先类注意:如果一个类没有明确继承的父类,默认继承Objectequals:比较两个对象内存地址是否相同hashCode():获取对象的hash值注意:1.hash码是内存地址+散列算法得到的一个数字2.hash码不等于内存地址3.hash码可能相同getClass:......
  • Java类和对象详解(下)
    目录前言:一.static关键字 1.static修饰成员变量2..static修饰成员方法3.静态代码块 二.代码块 1.普通代码块2.静态代码块3.静态代码块三.继承1.什么是继承2.为什么要继承3.继承的使用 4.父类的访问(super关键字)5. 子类构造方法6.代码执行顺序 7.组......
  • 基于Java的高校成绩报送系统的设计与实现(11870)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......