完美十进制数——去年天梯校赛

news/2025/2/15 16:24:26/

7-4 完美十进制数
对于一个十进制正整数 x,其包含 k 个位,每个数位的数字累加和为 sum 。如果 sum%k=0,那么这个十
进制数就是完美的。
例:对于数 12340,包含 5 位,数位累加和为 10,10%5=0,所以 12340 是完美十进制数。
给定一个十进制正整数 N,可以任意删除 N 的一些十进制位,求得到最大的完美十进制数是多少。
删除后剩余的数可以包含前导零,并且每个前导零都算作一位,例如:1063,删除最高位 1 后变成
063,包含 3 位,累加和为 9,是完美十进制数。如果删除 10 后变成 63,包含 2 位,累加和为 9,此时
就不是完美十进制数。
需要注意的是,前导零虽然占位,但不会改变十进制数值的大小,例如 063=63≤73。
如果最终答案的完美十进制数包含了前导零,前导零不用输出。
输入格式:
输入包含一行,表示十进制整数 N (1≤N≤1020),保证 N 不含前导零。
输出格式:
输出包含一行,表示得到的最大完美十进制数。不需要输出前导零。
3
输入样例1:6096
输出样例1:696
输入样例2:1063
输出样例2:63
样例解释:
063 是完美十进制数,前导零无需输出。

想法:

直接用dfs搜,用vis数组的0和1表示这一位的数字是否删除。然后存到数组v中,求最大值

#include<bits/stdc++.h>
using namespace std;
string a;
int len;
int vis[10]={0};
vector<int> v;
void dfs(int x){//位数if(x==len){int sign=0,num=0,sum=0;for(int i=0;i<len;i++)	{if(vis[i]) {sum+=a[i]-'0';num++;sign=1;}}if(sign==0) return ;//数字全都不选if(sum%num==0){int n=0;for(int i=0;i<len;i++) {if(vis[i])n=n*10+a[i]-'0';}v.push_back(n);}return ;}for(int i=1;i>=0;i--){//0是不选,1是选 vis[x]=i;// dfs(x+1);}
}
int main(){cin>>a;len=a.size();dfs(0);int ans=-1;for(int i=0;i<v.size();i++){ans=max(ans,v[i]);}cout<<ans;return 0;
}

结果没想到时间复杂度,数据范围是1<=n<=10e20,long long都爆了,这样的话就不能这么去最大值了(我还以为是1020hhh)。题解那说的是“字符串模拟十进制数比较大小”,本来我就弄个sort必字符串的,结果我发现这样的话就是“9”>“696”了。所以要先看一下字符串长度。

#include<bits/stdc++.h>
using namespace std;
string a;
int len;
int vis[10]={0};
vector<string> v;//不用开个vector的v[],人家本来都是数组
bool cmp(string a,string b){if(a.size()==b.size()) return a>b;return a.size()>b.size();
}
void dfs(int x){if(x==len){int sign=0,num=0,sum=0;for(int i=0;i<len;i++)	{if(vis[i]) {sum+=a[i]-'0';num++;sign=1;}}if(sign==0) return ;if(sum%num==0){string n;for(int i=0;i<len;i++) {if(vis[i]){n+=a[i];}}v.push_back(n);}return ;}for(int i=1;i>=0;i--){//0是不选,1是选 vis[x]=i;// dfs(x+1);}
}
int main(){cin>>a;len=a.size();dfs(0);sort(v.begin(),v.end(),cmp);int flag=0;for(int i=0;i<v[0].size();i++){if(v[0][i]!='0'&&flag==0){cout<<v[0][i];flag==1;}else if(flag) cout<<v[0][i];}return 0;
}


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

相关文章

python爬虫(7)之pandas模块

1、pandas模块里的两个对象 1、Series 对象 series很类似于一维数组但是它相较于数组多了行标签 示例代码&#xff1a; import pandas as pd ac pd.Series([[1,2,8,9],[3,5,5,8]]) print(ac) 结果如下&#xff1a; 当然也可以更改行标签 示例如下&#xff1a; import …

理解文件系统

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 磁盘 磁盘的机械构成 磁盘的物理存储 每个磁盘的盘面&#xff0c;磁头&#xff0c;扇面&#xff0c;扇区都有唯一的编号&#xff0c;同时&#xff0c;一个扇区的大小是512字节&#xff08;扇区的大小也有4KB的&#xff0c;或…

Java SE String类(一):常用方法(上)

1. 常用方法 1.1 字符串构造 String类的常用构造方法只有以下三种 public class Main {public static void main(String[] args) {String s1 "hello";//使用常量串进行构造String s2 new String("hello");//创建String对象char[] array {h,e,l,l,o};…

python的数据容器--字符串

字符串的取值 my_str "my name is zhou jie lun" valuemy_str[2] value2my_str[-10]print(f"从字符串{my_str}取下标为2的元素{value} 倒数16的值是{value2}")字符串的index查找方法 valmy_str.index("is") print(f"{val}")字符串的…

MonkeyRunner在自动化测试里的应用场景!

MonkeyRunner是Android提供的一个自动化测试工具&#xff0c;主要用于对Android设备或模拟器进行功能和压力测试。以下是一些MonkeyRunner在自动化测试中的应用场景及实例代码&#xff1a; 基本操作测试 点击屏幕上的特定位置或元素。 模拟滑动和手势操作。 发送按键事件。 …

2023年第三届中国高校大数据挑战赛第二场赛题D题赛题:行业职业技术培训能力评价(成品论文 代码与思路 视频讲解)

赛题 中国是制造业大国&#xff0c;产业门类齐全&#xff0c;每年需要培养大量的技能娴熟的技术工人进入工厂。某行业在全国有多所不同类型&#xff08;如国家级、省级等&#xff09;的职业技术培训学校&#xff0c;进行 5 种技能培训。学员入校时需要进行统一的技能考核&…

C语言函数—库函数

函数是什么&#xff1f; 数学中我们常见到函数的概念。但是你了解C语言中的函数吗&#xff1f; 维基百科中对函数的定义&#xff1a;子程序 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, method, subprogram, ca…

八股文-持续更新......

文章目录 SpringSpringBootDubboMQMysqlNettyRedis并发ZookeeperMybatisElasticsearchLinux微服务ZookeeperMybatisElasticsearchLinux