アルゴリズムノート練習カウント

トピック

説明

1-n内の完全な数を見つけます。いわゆる完全な数は、すべての要素が合計された数です。たとえば、6には3つの要素1,2,3,1 + 2 + 3 = 6、次に6があります。終わりました。つまり、最終的な数値は、そのすべての要素の合計に等しくなります。

入力

テストデータのセットは複数あり、入力n、nデータ範囲は大きくありません。

出力

入力のグループごとに、1-n内のすべての数値を出力してください。出力に複数の数字がある場合は、スペースで区切ります。出力の最後に余分なスペースを入れないでください。

サンプル入力コピー

6

サンプル出力コピー

6

アイデア

  • 言うことは何もありません。1-n/ 2の係数を見つけて合計します(最大係数はn / 2(最小係数)でなければなりません)
  • 時間を節約したい場合は、完成した番号のリストを作成できます

コード

#include <stdio.h>
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
vector<int> full;//完数打表
const int maxn=10005;




int main(){
    
    
    int n=0;
    while(scanf("%d",&n)!=EOF){
    
    
        if(!full.empty()&&n<=full[full.size()-1]){
    
    
            for(int i=0;i<full.size()&&full[i]<=n;i++)
                printf("%d ",full[i]);
            printf("\n");
            continue;
        }
        for(int i=0;i<full.size()&&full[i]<=n;i++)
            printf("%d ",full[i]);
        int start=3;
        if(!full.empty())
            start=full[full.size()-1]+1;
        for(int j=start;j<=n;j++){
    
    
            int sum=0;
            for(int i=1;i<=j/2;i++){
    
    
                if(j%i==0){
    
    
                    sum+=i;
                }
            }
            if(sum==j){
    
    
                printf("%d ",j);
                full.push_back(j);
            }
        }
        printf("\n");
    }
    return 0;
}


おすすめ

転載: blog.csdn.net/Cindy_00/article/details/108723563