1 条题解
-
0
解题思路
- 初始化数组:
- 使用
memset(self, 0, sizeof(self))
将布尔数组self
初始化为false
,用于标记每个数是否为自守数。
- 使用
- 遍历并标记非自守数:
- 外层
for
循环从i = 1
到i < 10000
。 - 对于每个数
i
,初始化t = i
和sum = i
。 - 内层
while
循环,当t
不为 0 且sum < 10000
时,将t
的个位数字加到sum
上,然后t
除以 10。 - 如果
sum < 10000
,将self[sum]
标记为true
,表示sum
不是自守数。
- 外层
- 输出自守数:
- 再次遍历数组
self
,当self[i]
为false
时,输出i
,即输出所有的自守数。
- 再次遍历数组
#include<iostream> #include<cstring> using namespace std; bool self[10000]; int main(){ memset(self,0,sizeof(self)); for(int i = 1; i < 10000; i++){ if(self[i]==0) cout << i << endl; int t = i, sum = i; while(t&&sum<10000){ sum+=t%10; t/=10; } if(sum<10000) self[sum] = 1; } }
- 初始化数组:
- 1
信息
- ID
- 317
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 1
- 上传者