POJ 2739

2018-01-09  本文已影响20人  DeamoV

题目LINK

题意解释

这道题是主要是看有几种顺序排列的素数相加能得到目标数目的题。
题目的关键在于 A.求素数 B. 累加看有几种累加方法.

收获

这道题的代码是完全是自己的,思路也是自己来的。代码风格借鉴了之前的之前做前两道题时参考的代码风格。主要功能单独提出来写,这样做以后发现整体代码的可读性上升了。以及,对于水题,觉得重点在于翻译题吧,并没有考到太多的计算机的知识。

AC代码

#include <iostream>
#include <stdio.h>
#define MAXN 10005

using namespace std;


int prime[MAXN];

int if_is_prime_number(int n){
    for (int i = 2;i * i <= n;i++) {
        if (n % i == 0) return 0;
    }
    return 1;
}

void init(){
    int i = 0;
    int j = 2;
    while(i < MAXN){
        if(if_is_prime_number(j) == 1){
                prime[i] = j;
                i++;
        }
        j++;
    }
}
// prime is prime tables
int solve(int n){
    int sum;
    int result;
    result = 0;
    if(n == 1)return 0;
    for(int i = 0; i < n; i++){
        sum = 0;
        int j = i;
        while(sum < n){
            sum = sum + prime[j];
            if(sum == n)result++;
            j++;
        }
    }
    return result;
}
int main()
{
    int judgenumber;
    int i,result;
    init();
    while(true){
        cin >> judgenumber;
        if(judgenumber == 0) return 0;
        result = solve(judgenumber);
        cout << result << endl;
    }
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读