题库首页 › 蓝桥杯大赛(C语言) › 题目 10127

给定一个正整数n,请将n中的每位数字重新排列并组成一个新数,要求新数的值要小于n,请找出所有符合要求的新数中最大的那个正整数,如果不存在这样的正整数,则输出-1。 例1:n=312,312中每位上的数字依次是3、1、2,重新排列组成的新数有321、231、213、132、123,新数中小于312的有231、213、132、123,其中符合要求的最大正整数是231; 例2:n=123,123中每位上的数字依次是1、2、3,重新排列组成的新数有312、321、231、213、132,新数中不存在小于123的正整数,故输出-1。 输入描述 输入一个正整数 n (1≤ n <2的63次方) 输出描述 输出一个正整数,表示符合要求的最大正整数 样例输入: 312 样例输出: 231

正确答案:参考程序(Python):重排新数小于n最大。将n转为数字,从右向左找第一个左侧大于右侧的位置(前一位大),交换并右侧降序,得小于n的最大。样例312→231,123→-1。核心:前一个排列。

试卷来源:202403(第15届)蓝桥杯C++编程青少组(选拔赛_中高级)真题

本卷相关题目

在线做题 同科目题库