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
- 上传者