1 条题解

  • 0
    @ 2025-5-6 20:12:41

    解题思路

    1. 初始化数组
      • 使用 memset(self, 0, sizeof(self)) 将布尔数组 self 初始化为 false,用于标记每个数是否为自守数。
    2. 遍历并标记非自守数
      • 外层 for 循环从 i = 1i < 10000
      • 对于每个数 i,初始化 t = isum = i
      • 内层 while 循环,当 t 不为 0 且 sum < 10000 时,将 t 的个位数字加到 sum 上,然后 t 除以 10。
      • 如果 sum < 10000,将 self[sum] 标记为 true,表示 sum 不是自守数。
    3. 输出自守数
      • 再次遍历数组 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
    上传者