算法题系列(一)

OJ1078: a+b(多实例测试1)(C语言数组解题) 题目描述 计算A+B 输入 输入第1行为一个整数n(1≤n≤10),代表测试的组数。 下面有n组测试数据,每组1行,为2个整数,为A, B。 输出 对每行输入,输出A+B的值,单独占一行。 样例输入 Copy 2 1 2 3 4 样例输出 Copy 3 7 提示 此类多实例测试解决方案: scanf("%d",&n); for(i=1;i<=n;i++) { //读入、处理一组测试实例 } 本题标程: #include"stdio.h" int main() { int a,b,n,i; sc 阅读详情

数串处理

一、题目描述

设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。

输入描述:

有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。

输出描述:

每组数据输出一个表示最大的整数。

示例1

输入

2
12 123
4
7 13 4 246

输出

12312
7424613

二、解法思路

1、题目分析

题目要求:

n个正整数,将他们连接成一排,组成一个最大的多位整数。

要组成一个最大的多位整数,n个输入的正整数已经确定,所组成的多位整数的位数也已经确定,为所有正整数的位数之和。

那么只需要将最高位所在的数字最大的正整数放在最前面,最高位所在的数字第二大的数放在组合的第二位,以此类推。

上面的想法很简单,但是也可能出现两个正整数的最高位大小一样的情况,比如32和35。也有可能出现两个数前几位相同,但是位数不一样的情况。这些我们后面会考虑到。

2、算法设计

要解决这个问题,我的思路是创建一个方法Boolean compare(int a,int b),传入两个正整数a,b,返回整数a在组合时的优先权值是否高于整数b的bool值。

在设计好判断两个数在组合时的权值高低的方法之后,main方法中就可以直接通过任意的排序方法对输入的数组进行排序。只需要将传统排序算法的大小比较改成自己定义的权值判断方法即可。

比较权值的方法:

    /**
    * 比较两个整数在连成一排组和时的优先权
    * 方法:从两个数的最高位开始比较,如果当前位不相等,则结束。
    * 如果当前位相等且两个数不都是最后一位,则后移一位开始比较。
    * 已经达到最后一位的则仍然留在最后一位。
    */
    public static Boolean compare(int a,int b){
        int i = 0,j = 0;

        while (i < String.valueOf(a).length() || j < String.valueOf(b).length()){
            if(getNumberByIndex(a,i) > getNumberByIndex(b,j)){
                return true;
            }else if(getNumberByIndex(a,i) < getNumberByIndex(b,j)){
                return false;
            }else{
                i++;
                j++;
            }
        }
        return true;
    }

辅助方法(获取一个整数第 i 位的数字的方法):

    // 获取一个整数指定位的数字,高位->低位为0->max。
    // 如果所找的位数超过了数字的最大位,则返回最高位的数字。
    public static int getNumberByIndex(int n,int index){
        String number = String.valueOf(n);
        if (index < number.length()){
            return Integer.valueOf(number.charAt(index));
        }else{
            return Integer.valueOf(number.charAt(0));
        }
    }

三、完整代码


import java.util.Scanner;

/**
 * 题目描述
 * 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
 * 如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
 * 如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
 */


public class Test1 {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        do{
            int n = input.nextInt();
            int[] number = new int[n];
            for (int k = 0;k < n;k++){
                number[k] = input.nextInt();
            }

            //直接使用冒泡排序进行排序,将权值高的数放到前面
            for (int i = 0;i < n;i++){
                for (int j = n-1;j > i;j--){
                    if (compare(number[j],number[i])){
                        //交换number[i]和number[j]的位置
                        number[i] = number[i] + number[j];
                        number[j] = number[i] - number[j];
                        number[i] = number[i] - number[j];
                    }
                }
            }
            for(int each:number){
                System.out.print(each);
            }
            System.out.println();
        }while (input.hasNext());
    }

    /**
    * 比较两个整数在连成一排组和时的优先权
    * 方法:从两个数的最高位开始比较,如果当前位不相等,则结束。
    * 如果当前位相等且两个数不都是最后一位,则后移一位开始比较。已经达到最后一位的则仍然留在最后一位。
    */
    public static Boolean compare(int a,int b){
        int i = 0,j = 0;

        while (i < String.valueOf(a).length() || j < String.valueOf(b).length()){
            if(getNumberByIndex(a,i) > getNumberByIndex(b,j)){
                return true;
            }else if(getNumberByIndex(a,i) < getNumberByIndex(b,j)){
                return false;
            }else{
                i++;
                j++;
            }
        }
        return true;
    }

    // 获取一个整数指定位的数字,高位->低位为0->max。
    // 如果所找的位数超过了数字的最大位,则返回最高位的数字。
    public static int getNumberByIndex(int n,int index){
        String number = String.valueOf(n);
        if (index < number.length()){
            return Integer.valueOf(number.charAt(index));
        }else{
            return Integer.valueOf(number.charAt(0));
        }
    }
}

因为刚开始写博客,如果对您有帮助,希望能给我一个留言,这是对我最大的支持,谢谢。

解题报告(一)快速沃尔什变换FWT(ACM / OI)超高质量题解 阅读详情

相关推荐

CATIA二次开发实战:我用VBA写了个BOM表自动导出工具,效率提升80%

本文详细介绍了如何利用VBA进行CATIA二次开发,构建BOM表自动导出工具的全过程。通过智能解析算法、异常处理机制和性能优化技巧,该工具将BOM表生成时间从2.5小时缩短至8分钟,效率提升80%。文章还探讨了与PDM系统集成和定制化报告生成等扩展应用,为机械设计工程师提供了实用的自动化解决方案。

weixin_33709590的博客 558

求平均值

题目描述 输入一些整数,求平均值 输入 多组测试数据 首先输入1个整数n表示测试组数 然后每行首先输入1个整数m,再输入m个整数 输出 对于每组测试数据输出1行,内容为m个整数的平均值,保留2位小数 样例输入 2 2 1 2 5 3 4 6 9 3 样例输出 1.50 5.00 #include<stdio.h> int main() { int n,i,j; float a,m;...

hqm793899006的博客 937

论文精读-ReTransformer ReRAM-based Processing-in-MemoryArchitecture for Transformer Acceleration

Transformer已经成为一种流行的深度神经网络(DNN)模型,用于神经语言处理(NLP)应用,并在神经机器翻译、实体识别等方面表现出优异的性能。然而,其在自回归解码器中的规模化点积注意机制在推理过程中带来了性能瓶颈。Transformer也是计算和内存密集型的,需要硬件加速解决方案。

a284365的博客 1923

多组测试数据求最大值

Description 输入一些整数,求最大值 Input 多组测试数据 首先输入1个整数n表示测试组数 然后每行首先输入1个整数m,再输入m个整数 Output 对于每组测试数据输出1行,内容为m个整数的最大值 #include&lt;stdio.h&gt; int main() { int n,i; scanf("%d",&amp;n); for(i=1;i&lt;=n;i++) { int ...

z2431435的博客 4130

激光雷达+相机标定避坑指南:手把手教你用KITTI数据完成坐标转换

本文详细介绍了激光雷达与相机标定的实战指南,利用KITTI数据集完成精准坐标转换。从数据准备、工具链搭建到标定矩阵加载与验证,再到坐标转换流水线的工程实现,提供了全面的避坑技巧和工程实践建议。特别强调了多传感器融合中的常见问题及解决方案,帮助开发者提升自动驾驶和机器人感知系统的环境感知精度。

book8的博客 836

离线安装 nvidia-docker2(nvidia-container-toolkit)

很多时候大家都有用docker使用gpu的需求,但是因为网络等原因不是那么好用,这里留了一个给ubuntu的安装包,网络好的话也提供了在线安装方式。

father_yingying的博客 1181

python编程练习之二

2017-滴滴出行- 末尾为0的个数 题目描述: 输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2; 输入描述: 输入为一行,n(1 ≤ n ≤ 1000) 输出描述: 输出一个整数,即题目所求 示例1: - 输入: 10 - 输出: 2 解法一:计算num的阶乘,统计结果中末尾有多少个0 缺点:数值过大会溢出

Running_free的博客 1999

《UDS协议从入门到精通》系列——图解0x34:请求下载

上传下载类服务之0x34-请求下载,图解请求+响应格式,直观易懂,快速上手!!

车载系统攻城狮 4931

n个正整数,联接成一排,组成一个最大(最小)的多位整数 python

n个正整数,联接成一排,组成一个最大(最小)的多位整数 python

banana1006034246的博客 5358

STC单片机 普通 I/O 口中断功能介绍和使用

STC32单片机 普通 I/O 口中断功能介绍和使用

perseverance51博客 3048

华为OD机试真题 新系统 2026-04-22 Java&Go 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 264

跳槽必刷算法题系列(一)

点上方小浩算法回复【进群】进高质量刷题交流群群内可 BAT 内推!今天是小浩算法 “365刷题” 第104天问:程序员最讨厌康熙的哪个儿子。答:胤禩。01PART搜索二维矩阵这道题目非...

Google大神 422

泛微表单添加自定义按钮

泛微表单添加自定义按钮

技术分享 2191

每天一道算法题系列一之两数之和

每天一道算法题系列: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 来源是力扣,大家喜欢可以去力扣中文网做相应的其他的题,某浏览器直接搜力扣即可(英语不好的朋友进中文版),我这里只是记录自己的一些思想。 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2,

qq_38091343的博客 184

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

算法题练习系列之(一):守形数

-------------------------------------------------------------------------------------------------------------------------------------------------------- 时间限制:1秒  空间限制:32768K ----------------------

大脸驴 1169

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

算法题练习系列之(四十九):一的个数

NowCoder总是力争上游,凡事都要拿第一,所以他对“1”这个数情有独钟。爱屋及乌,他也很喜欢包含1的数,例如10、11、12……。 不仅如此,他同样喜欢任意进制中包含1的数。当然,其中包含1的个数越多他越喜欢。你能帮他统计一下某个数在特定的进制下1的个数吗?

大脸驴 635

算法题练习系列一 -- 整数分解为连续整数的和

【问题描述】 某些 的形式,例如 15 = 1 + 2+3+4+5  15 = 4 + 5 + 6 15 = 7 + 8 某些整数不能分解为连续整数的和,例如:16 输入:一个整数N(N &lt;= 10000) 输出:整数N对应的所有分解组合,按照每个分解中的最小整数从小到大输出,每个分解占一行,每个数字之间有一个空格(每行最后保留一个空格);如果没有任何分解组合,则输出...

RainyLin-SunnyLin的专栏 1077

leetcode数据库算法题系列一 :175. 组合两个表(MySQL版)

题目地址:https://leetcode-cn.com/problems/duplicate-emails/ 本系列教程,从简到难,通过19个案例来探索SQL编程的艺术。 SQL 是一门结构化查询语言,更是一门面向集合的语言。 一 、题目:组合两个表 表1: Person 列名 类型 PersonId int FirstName varchar LastName var...

uzong 869

前端-算法题系列 (一) => 数组扁平化于去重相结合

除了建立系统的知识体系以外,我们还需要为让自己的脑子是不是得运转一下~,从面试题中进行总结,该系列的灵感来自于 木易杨 大大的分享 第一题、(携程)算法手写题 已知如下数组 ...

余光的博客 558

C# 算法题系列(一) 两数之和、无重复字符的最长子串

题目一 原题链接https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = ...

weixin_30387663的博客 220

数据变成数组_高级软件工程师 面试题-算法题系列一、链表、数组

准备弄一个算法面试题系列。列举下面试中常问的一些问题。一、链表和数组的区别是什么?插入和查询的时间复杂度分别是多少?1、从逻辑结构上来说,这两种数据结构都属于线性表。线性表,就是所有数据都排列在只有一个维度的“线”上,就像羊肉串一样,把数据串成一串。对其中任意一个节点来说,除了头尾,只有一个前趋,也只有一个后继。2、在内存中,数组占用的是一块连续的内存区,而链表在内存中,是分散的。数组,与生俱来具...

weixin_33664951的博客 155

数组和链表的区别_高级软件工程师 面试题-算法题系列一、链表、数组

准备弄一个算法面试题系列。列举下面试中常问的一些问题。一、链表和数组的区别是什么?插入和查询的时间复杂度分别是多少?1、从逻辑结构上来说,这两种数据结构都属于线性表。线性表,就是所有数据都排列在只有一个维度的“线”上,就像羊肉串一样,把数据串成一串。对其中任意一个节点来说,除了头尾,只有一个前趋,也只有一个后继。2、在内存中,数组占用的是一块连续的内存区,而链表在内存中,是分散的。数组,与生俱来具...

weixin_39722946的博客 431

c++随机打乱数组_高级软件工程师 面试题-算法题系列一、链表、数组

准备弄一个算法面试题系列。列举下面试中常问的一些问题。一、链表和数组的区别是什么?插入和查询的时间复杂度分别是多少?1、从逻辑结构上来说,这两种数据结构都属于线性表。线性表,就是所有数据都排列在只有一个维度的“线”上,就像羊肉串一样,把数据串成一串。对其中任意一个节点来说,除了头尾,只有一个前趋,也只有一个后继。2、在内存中,数组占用的是一块连续的内存区,而链表在内存中,是分散的。数组,与生俱来具...

weixin_39614561的博客 119

LeetCode算法题-Trim a Binary Search Tree(Java实现)

这是悦乐书的第284次更新,第301篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第152题(顺位题号是669)。给定二叉搜索树以及L和R的最低和最高边界,修剪树以使其所有元素位于[L,R](R> = L)。可能需要更改树的根,因此结果应返回修剪后的二叉搜索树的新根。例如: 输入:L = 1 R = 2 1 / \ 0 2 输出: ...

weixin_34343689的博客 137

python控制台输入语句 算法题_Python算法题(三)——经典函数题

题目一(统计字符串中指定类型字符的个数):假设所有字符分为三类:字母,数字及其他字符。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬编写一个函数,判断指定字符的类型,并统计字符串中该类型字符的个数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬...

weixin_39772352的博客 360

剑指offer第2版:树系列(二)

二叉树的题要优先思考是前序、中序还是后序的遍历思路

weixin_51142926的博客 2521
上一篇: JetBrains CLion初始配置教程
下一篇: Android 使用Google Core动态功能交付(Feature Delivery)
Fu_Long
博客等级 码龄10年 4粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值