【备战秋招】每日一题:2022.10.27-数位和恰好为n的最大整数

news/2024/11/15 19:37:15/

为了更好的阅读体检,可以查看我的算法学习网
在线评测链接:P1017

题目内容

有一位名叫塔子哥的数学爱好者,他非常喜欢研究数字之间的规律和关系。

一天,他在研究正整数时,突然想到一个问题:如何找到一个最大的正整数,使得该正整数所有数位之和等于给定的正整数 x x x ,且每个数位都不相等(任意一个数位不能是 0 0 0 )?

塔子哥开始进行计算,并且思考了很长时间,但是他仍然找不到一个可行的解决方案。于是他决定向你寻求帮助,希望你能够帮助他解决这个问题。

输入描述

一个正整数 x x x

1 ≤ x ≤ 100 1\le x \le 100 1x100

输出描述

如果不存在合法解,请输出 − 1 -1 1

否则输出最大的满足条件的正整数。

样例

输入

9

输出

621

题目思路

因为每个数位的数字都不能相等,因此凑出的正整数的长度不会超过9,所以可以枚举正整数的长度

贪心:

假设长度为i,则进行的操作为:从9到1选择数字,能选就选,直到选满i个,且每位之和为x。

选择时候需要判断选了这个数字后,之后能不能满足,

即:令s=x-sump , sump为前面选的数字之和,如选了当前最大的j,则判断s-j是否大于等于从1到剩下的位数的总和。

def check(s,cnt):
if s>=cnt*(cnt+1)//2:return True
return False

若能满足就选

代码

Python代码

def check(s,cnt):if s>=cnt*(cnt+1)//2:return Truereturn False
n=int(input())
ans=-1
for i in range(10):s,cnt=n,isum=0for j in range(9,0,-1):if s==0 or cnt==0:breakif check(s-j,cnt-1)==True:sum=sum*10+js-=jcnt-=1if s==0:ans=sum
print(ans)

Java代码

import java.util.Scanner;class Main {public static boolean check(int s, int cnt) {if (s >= cnt * (cnt - 1) / 2)return true;return false;}public static void main(String[] args) {int n, ans = -1;Scanner scanner = new Scanner(System.in);n = scanner.nextInt();for (int i = 0; i < 10; i++) {int s = n, cnt = i;int sum = 0;for (int j = 9; j > 0; j--) {if (s == 0 || cnt == 0)break;if (check(s - j, cnt - 1)) {sum = sum * 10 + j;s -= j;cnt--;}}if (s == 0)ans = sum;}System.out.println(ans);}
}

C++代码

#include <iostream>
#include <algorithm>
using namespace std;bool check(int s,int cnt){if (s>=cnt*(cnt-1)/2)return true;return false;
}
int main(){int n;cin>>n;int ans=-1;for (int i=0;i<10;i++){int s=n,cnt=i;int sum=0;for (int j=9;j>0;j--){if (s==0||cnt==0)break;if (check(s-j,cnt-1)){sum=sum*10+j;s-=j;cnt--;}}if (s==0)ans=sum;}cout<<ans<<endl;return 0;
}

Js代码

process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';process.stdin.on('data', (data) => {input += data;return;
});
process.stdin.on('end', () => {function check(s,cnt){if (s>=cnt*(cnt-1)/2)return true;return false;}var inputarray=input.split('\n');var n=Number(inputarray[0]),ans=-1;for (let i=0;i<10;i++){let s=n,cnt=i;let sum=0;for (let j=9;j>0;j--){if (s==0||cnt==0)break;if (check(s-j,cnt-1)){sum=sum*10+j;s-=j;cnt--;}}if (s==0)ans=sum;}console.log(ans);
});

题目内容均收集自互联网,如如若此项内容侵犯了原著者的合法权益,可联系我: (CSDN网站注册用户名: 塔子哥学算法) 进行删除。


http://www.ppmy.cn/news/768259.html

相关文章

CPU温度过高会导致电脑死机么

随着计算机的不断发展&#xff0c;CPU的速度和性能不断提高&#xff0c;但同时也面临着散热难题。CPU温度过高可能导致系统不稳定、性能下降、甚至硬件损坏等问题&#xff0c;因此解决CPU过热问题一直是计算机硬件维护的一个重要方面。 CPU温度过高的情况通常出现在使用高性能的…

关闭cpu温度过高的警报

CPU 温度过高操作系统升级到 2.6 的内核后&#xff0c;总是出现&#xff1a;CPU0: Temperature above thresholdCPU0: Running in modulated clock mode确认没有超频&#xff0c;检查了 CPU 风扇散热没有问题&#xff0c;CPU 的温度较之使用 2.4 内核的时候也没有升高。可是&am…

【学习笔记之MaxiPy 篇】寻找色块

import sensor import image import lcd import time lcd.init()#初始化屏幕 #摄像头加载 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1)green_threshold (0, 80, -70, -10, -0, 30)#定义绿色参数# 从图片…

CPU的异常处理

概述 什么是异常&#xff1f;正常流程之外的流程都叫做异常&#xff0c;中断是异常的一种。 现场保护&#xff1a;中断发生的时候&#xff0c;CPU需要记录当前程序的上下文&#xff0c;然后再去处理异常&#xff0c;以便异常处理完成后&#xff0c;返回到原先的程序当中去。 …

架构篇--系统监控--spring-boot2.0.X 系统原生信息监控,SQL信息监控,cpu温度监控报警,cup磁盘内存使用率监控报警,自定义端点监控以及子节点获取,系统异常邮件通知

架构篇–系统监控–spring-boot2.0.X 系统原生信息监控&#xff0c;SQL信息监控&#xff0c;cpu温度监控报警&#xff0c;cup磁盘内存使用率监控报警&#xff0c;自定义端点监控以及子节点获取&#xff0c;加工原生端点&#xff0c;系统异常邮件通知&#xff0c;ui界面spring-b…

tor(洋葱卷)浏览器下载地址

http://torproject.lu/zh-CN/thank-you/

洋葱网络简单介绍

通过洋葱网络来进行匿名访问网站 https://mp.weixin.qq.com/s?__bizMzIzMzgxOTQ5NA&mid2247483855&idx1&sn4c028f0b8df5d5a729e0234197f5f4b3&chksme8fe9dc6df8914d0abc0987385946bab368db8c12593e6b83f2b58cb2b17c9ea515e62e9d4c9&scene21#wechat_redire…

洋葱浏览器Tor Browser for Mac

Tor Browser for Mac是Tor&#xff0c;Vidalia Torbutton的一个易于使用的便携包和Firefox叉预配置协同工作的开箱。它包含一个经过修改的Firefox副本&#xff0c;旨在解决主线版本中的隐私和安全问题。Tor最初是作为美国海军研究实验室的第三代洋葱路由项目设计&#xff0c;实…