当前位置: 首页 > article >正文

UVa1583生成元(Digit Generator)

题目

       如果x加上x的各个数字之和得到y,也就是说x是y的生成元。给出n(1<=n<=100000),求最小生成元。无解则输出0。

输入输出样例

输入

3
216
121
2005

输出 

198
0
1979

思路

       要想解决这个题目,只需要对每一个输入的值从1开始遍历找到小于它自身的生成元取最小的即可,但是这样的话每一个输入都需要枚举一次,效率太低。更好的方法是我们一次性把1到100000内的所有正整数的最小生成元都求出来,然后对于每一个输入,直接查表即可。 

代码

#include<stdio.h>
#include<string.h>
#define maxn 100005//大小比较大的数组定义在主函数外面,防止出现异常
int ans[maxn];
int main(){
	int T,n;
	memset(ans,0,sizeof(ans));//将数组每一个的值初始化为0 
	int m=1;
	for(m=1;m<maxn;m++){//计算1到100000内的所有整数的最小生成元 
		int x=m,y=m;
		while(x>0){
			y+=x%10;
			x/=10;
		}
		if(ans[y]==0||m<ans[y]){//如果当前数的生成元还没有计算,或者后面计算出来的生成元比目前的生成元小,那么改为当前值 
			ans[y]=m;
		}
	}
	//接下来对于各种输入,直接查表即可 
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		printf("%d\n",ans[n]);
	}
	return 0;
} 

   这个题目的重点就是打表法的使用。


http://www.kler.cn/a/160211.html

相关文章:

  • 批量从Excel某一列中找到符合要求的值并提取其对应数据
  • 67页PDF |埃森哲_XX集团信息发展规划IT治理优化方案(限免下载)
  • kubernetes简单入门实战
  • Vue计算属性computed
  • 【Excel】ToRow超级查找函数
  • 安全见闻1-5
  • Nero刻录光盘软件-极好用
  • 华为对优秀项目经理的三点要求
  • 学习TypeScrip2(任意类型any和unknown)
  • 前端使用 xlsx.js 工具读取 excel 遇到时间日期少 43 秒的解决办法
  • 【SQL思考记录】力扣181. 超过经理收入的员工
  • inBuilder低代码平台新特性推荐-第十三期
  • Python项目部署利器:轻松上手Git和GitHub
  • No matching version found for @babel/compat-data@^7.23.5 处理
  • 绘制纹理C++
  • Windows 安装 flash-attention 和 bitsandbytes
  • 根文件系统初步测试
  • YOLOv8改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
  • 如何解决syntaxerror: more than 255 arguments 报错
  • HG/T 5367.2-2022 轨道交通车辆耐电弧绝缘涂料检测
  • 论文笔记--A Fine-grained Interpretability Evaluation Benchmark for Neural NLP
  • Redis--13--缓存一致性问题
  • ES 模块语法改为 CommonJS 模块语法的区别
  • RK3288升级WebView版本,替换webview app
  • mv视频怎么做成二维码?扫码用流量看视频更方便
  • 1.2 C语言简介