博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯 算法训练 - 寂寞的数 道德经曰:一生二,二生三,三生万物。   对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和。例如,d(23)=23+2+3=28, d(1481
阅读量:3963 次
发布时间:2019-05-24

本文共 1164 字,大约阅读时间需要 3 分钟。

问题描述

道德经曰:一生二,二生三,三生万物。

  对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和。例如,d(23)=23+2+3=28, d(1481)=1481+1+4+8+1=1495。
  因此,给定了任意一个n作为起点,你可以构造如下一个递增序列:n,d(n),d(d(n)),d(d(d(n)))…例如,从33开始的递增序列为:
  33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, …
  我们把n叫做d(n)的生成元,在上面的数列中,33是39的生成元,39是51的生成元,等等。有一些数字甚至可以有两个生成元,比如101,可以由91和100生成。但也有一些数字没有任何生成元,如42。我们把这样的数字称为寂寞的数字。
输入格式
  一行,一个正整数n。
输出格式
  按照升序输出小于n的所有寂寞的数字,每行一个。
例子

样例输入

40
样例输出
1
3
5
7
9
20
31
数据规模和约定

n<=10000

提示

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0

注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型

思路

从前到后依次遍历,求出每一个数的d(n),然后将其在数组中标记为1,则最后没有标记出来的数就是寂寞的数~~

代码:

#include 
int alone[10010]={
0};int main(){
int N; int k; int sum; scanf("%d", &N); int i; for(i = 1; i <= N; ++i) {
k = i; sum = i; while(k) {
sum += k % 10; //求出来i的d(n); k /= 10; } alone[sum] = 1; //将这个求出来的数标记为1 } for(i = 1; i < N; ++i) {
if(alone[i] == 0) //没有标记出来的数就是寂寞的数 printf("%d\n", i); } return 0;}

转载地址:http://xprzi.baihongyu.com/

你可能感兴趣的文章
ubuntu设置开机默认进入字符界面方法
查看>>
chrome 快捷键
查看>>
Linux下buffer和cache的区别
查看>>
程序员不应该再犯的五大编程错误
查看>>
[转载][转帖]Hibernate与Sleep的区别
查看>>
Linux系统的默认编码设置
查看>>
Linux系统调用
查看>>
Linux 信号signal处理机制
查看>>
Linux 信号signal处理函数
查看>>
perror简介
查看>>
linux的system () 函数详解
查看>>
在shell脚本的第一行中,必须写#!/bin/bash
查看>>
一句话##错误 'ASP 0116' 丢失脚本关闭分隔符
查看>>
文件上传漏洞之.htaccess
查看>>
常见网络安全设备默认口令
查看>>
VirtualBox虚拟机网络配置
查看>>
oracle vm virtualbox虚拟机下,CentOS7系统网络配置
查看>>
解决Linux CentOS中cp -f 复制强制覆盖的命令无效的方法
查看>>
wdcpv3升级到v3.2后,多PHP版本共存的安装方法
查看>>
PHP统计当前网站的访问人数,访问信息,被多少次访问。
查看>>