给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 <把一个整数各个数位进行全排列>

"""
给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 -> 把一个整数各个数位进行全排列
"""

# 使用 permutations() 方法实现
import itertools

def full_arrangement(num):
  my_str = ‘‘
  my_list = []
  permutation = list(itertools.permutations(str(num), len(str(num))))
  for p in permutation:
    for i in range(len(p)):
      my_str += p[i]
      if len(my_str) == len(str(num)):
        my_num = int(my_str)
        if my_num > num:
          my_list.append(my_num)
        my_str = ‘‘
  return my_list

if __name__ == ‘__main__‘:
num = int(input(‘输入一个正整数:‘))
my_list = full_arrangement(num)
# 离该整数最近的大于自身的 换位数
try:
  digits = min(my_list)
  print(digits)
except ValueError as e:
  print(‘该正整数没有比自身大的换位数‘)

原文地址:https://www.cnblogs.com/changqing8023/p/9068404.html

时间: 2024-10-09 04:41:20

给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 <把一个整数各个数位进行全排列>的相关文章

c#编程:给定一个正整数求出是几位数并逆序输出

<span style="color:#FF0000;">第一步:把输入的数字转为字符串n.ToString() 第二步:求出字符串的长度即为正整数的位数 第三步:从后向前逆序输出</span> 附代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; //给一个正整数, //要求:一.求它是几位数,二.逆序打印出各位数字. namespa

给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3^2,…) 请你求出这个序列的第N项的值(用10进制数表示)。 例如,对于k=3,N=100,正确答案应该是9

只有1行,为2个正整数,用一个空格隔开: k N (k.N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000). 计算结果,是一个正整数(在所有的测试数据中,结果均不超过2.1*10^9).(整数前不要有空格和其他符号). #include<stdio.h> int n2[1010];long long l1 = 1; long long n, k; long long sm(long long i,long long k) { long long s = 1; int j; fo

一道笔试题-给定一个正整数序列,请尝试将它们重新排列使得排列的结果最大。

问题描述:给定一个正整数序列,请尝试将它们重新排列使得排列的结果最大,例如正整数序列为9,31,35,3,7则最大值为9735331. 思路分析:先将正整数序列转换为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可.根据题目的要求,两个数字m和n排成的数字mn和nm,如果mn<nm,那么我们应该输出nm,也就是m应该排在n的后面,也就是m<n.反之,如果nm<mn,m排在n的前面,n<m.如果mn==mn,m等于n. 比较函数的定义是本解决方案的关键.这道题其实就是希

9.5位操作(三)——给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数

/** * 功能:给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数. * (一个略大一个略小.) */ 三种方法: 方法一:蛮力法 方法二:位操作法 <span style="white-space:pre"> </span>/** * 方法:位操作法 * 思路:获取后一个较大的数 * 1)计算c0和c1.c1是拖尾1的个数,c0是紧邻拖尾1的作坊一连串0的个数. * 2)将最右边.非拖尾0变为1,其位置为p=c1+c0. * 3)将位p

一个正整数N,不用sqrt求开方数

#include<stdio.h> int main() { int n; // 正整数n int i; // for循环 int myR = 1; // 保证myR^2 <= n < (myR+1)^2 double temp; // 临时变量 while(scanf("%d", &n) != EOF) { if (n <= 0) continue; // 寻找myR for (i=1; i<=n/2; i++) { if ((i * i

26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.

?#include<iostream> using namespace std; int main() { for(int i=1;i<=1000;i++) { int sum=0; for(int j=1;j<i;j++) { if(i%j==0) { sum+=j; } } if(sum==i) { cout<<i<<" "<<endl; } } return 0; } 26.一个正整数如果恰好等于它的因子之和,这个数称为

说一说,求一个正整数的二进制中0的个数

昨天突然看到一个算法题:一个正整数a的二进制中0的个数: 话说这是个老题了,直观的算法就每次右移一位,直到0为止:代码就省略了: 仔细想想有更好的方案么? 就是这个题可以转换成一个正整数~a的二进制中1的个数: 求1的个数这个貌似就很熟悉了吧: int num = 0; b = ~a; while(b){ num++; b = b & (b-1); } 是不是容易了许多呢 另外像java和python这种没有unsigned的语言要自己去转 b = ~a & 0x0ffff

任意输入一个正整数,求出其各位数字之和

//任意输入一个正整数,求出其各位数字之和 #include <stdio.h>void main(){    int num,s=0;     printf("请任意输入一个正整数:\n");     scanf("%d",&num);     while(num!=0)     {         s=num%10+s;//没有赋值的操作,在编写程序时没有意识到这一点         num=num/10;     } printf(&quo

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。

问题描述:给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果.输入值小于1000.如,输入为10,程序应该输出结果为2.(共有两对质数的和为10,分别为(5,5),(3,7)) 附算法代码: public class PrimeNumber { //判断是否是质数 protected boolean isPrimeNumber(int num){ if(num == 2) return true;//2特殊处理 if(num < 2 || num % 2 == 0) r