poj-2739
来源:互联网 发布:淘宝商城电视机 编辑:程序博客网 时间:2024/06/05 20:52
#include "stdio.h"
#include "malloc.h"
int * getPrimeArray(int x, int * primeArraylength) {
int * baseArray = (int *)malloc(x * sizeof(int));
if (!baseArray) {
return NULL;
}
for (int i = 0; i < x; i++) {
baseArray[i] = 0;
}
baseArray[0] = -1;
for (int i = 2; i <= x/2; i++) {
for (int j = 2; j <= x/i; j++) {
baseArray[i*j-1] = -1;
}
}
int len = 0;
for (int i = 0; i<x; i++) {
if (!baseArray[i]) {
len++;
}
}
*primeArraylength = len;
int *primeArray = (int *)malloc((len + 1) * sizeof(int));
if (primeArray != NULL) {
int j = 0;
for (int i = 0; i<x; i++) {
if (!baseArray[i]) {
primeArray[j++] = i+1;
}
}
primeArray[len] = -1;
}
return primeArray;
}
int getPrimeSumCombinationNum(int x) {
int primeSumCombinationNum = 0;
int length = 0;
int *primeArray = getPrimeArray(x, &length);
// for (int i = 0; i < length; i++) {
// printf(" %d", primeArray[i]);
// }
int begin = 0;
int end = 0;
int primeSum = primeArray[begin];
while (begin <= end && end < length) {
if (primeSum == x) {
primeSumCombinationNum++;
if (end > begin) {
primeSum -= primeArray[begin];
begin++;
} else if (end == begin) {
break;
}
} else if (primeSum > x) {
if (end == begin) {
break;
}
primeSum -= primeArray[begin++];
} else if (primeSum < x) {
if (end+1 >= length) {
break;
}
primeSum += primeArray[++end];
}
}
free(primeArray);
primeArray = NULL;
return primeSumCombinationNum;
}
int main() {
while(1) {
int primeSum = 0;
scanf("%d", &primeSum);
if (!primeSum) {
break;
} else {
printf("%d\n", getPrimeSumCombinationNum(primeSum));
}
}
#include "malloc.h"
int * getPrimeArray(int x, int * primeArraylength) {
int * baseArray = (int *)malloc(x * sizeof(int));
if (!baseArray) {
return NULL;
}
for (int i = 0; i < x; i++) {
baseArray[i] = 0;
}
baseArray[0] = -1;
for (int i = 2; i <= x/2; i++) {
for (int j = 2; j <= x/i; j++) {
baseArray[i*j-1] = -1;
}
}
int len = 0;
for (int i = 0; i<x; i++) {
if (!baseArray[i]) {
len++;
}
}
*primeArraylength = len;
int *primeArray = (int *)malloc((len + 1) * sizeof(int));
if (primeArray != NULL) {
int j = 0;
for (int i = 0; i<x; i++) {
if (!baseArray[i]) {
primeArray[j++] = i+1;
}
}
primeArray[len] = -1;
}
return primeArray;
}
int getPrimeSumCombinationNum(int x) {
int primeSumCombinationNum = 0;
int length = 0;
int *primeArray = getPrimeArray(x, &length);
// for (int i = 0; i < length; i++) {
// printf(" %d", primeArray[i]);
// }
int begin = 0;
int end = 0;
int primeSum = primeArray[begin];
while (begin <= end && end < length) {
if (primeSum == x) {
primeSumCombinationNum++;
if (end > begin) {
primeSum -= primeArray[begin];
begin++;
} else if (end == begin) {
break;
}
} else if (primeSum > x) {
if (end == begin) {
break;
}
primeSum -= primeArray[begin++];
} else if (primeSum < x) {
if (end+1 >= length) {
break;
}
primeSum += primeArray[++end];
}
}
free(primeArray);
primeArray = NULL;
return primeSumCombinationNum;
}
int main() {
while(1) {
int primeSum = 0;
scanf("%d", &primeSum);
if (!primeSum) {
break;
} else {
printf("%d\n", getPrimeSumCombinationNum(primeSum));
}
}
}
不难,就是繁琐,用了素数筛子过滤, 还有滑动窗口。
C++ Accept
低级错误: 1. malloc分配的是字节,一开始忘带*sizeof()了, 哎 语言用的太多就是容易忘事
2. 1不是素数
素数筛子和滑动窗口都是比较通用的模式.
ugly code.
0 0
- POJ 2739
- poj 2739
- poj 2739
- POJ 2739
- POJ 2739
- poj-2739
- POJ 2739
- poj 2739
- poj 2739
- POJ 2739
- POJ 2739
- poj 2739
- Poj 2739
- POJ 2739
- POJ 2739
- POJ 2739
- poj 2739
- 【POJ】2739
- 金万维异速联远程接入解决方案
- MFC 程序入口和执行流程
- 李瑞英告别《新闻联播》
- Spring data jpa批量插入和更新
- 神奇的C语言十二:宏
- poj-2739
- static
- oracle 触发器
- [Win]进程间通信——邮槽Mailslot
- 深入理解计算机系统之旅(五)优化程序性能
- NSString的常用方法,包括查找、切割、比较
- 循环调用$.ajax()引起的问题解决
- 接口对接时要仔细
- linux下C语言实现多线程通信—环形缓冲区,可用于生产者(producer)/消费者(consumer)