POJ 2262 Goldbach’s Conjecture

大家都说是水题,可能是自己实力差把,我感觉可不水。

我用普通的判断sqrt(n)的方法求素数,结果TLE了。

看了论坛一个朋友的方法,是用的筛选法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 #include <iostream>
#include <cmath>
#include <time.h>
using namespace std;
 
/*
bool Is_odd_prime(int n)
{
	int i;
	if(n % 2 == 0)
		return 0;
	for(i = 2; i < sqrt(double(n)); i++)
		if(n % i == 0)
			return 0;
	if(i == n/2)
		return 1;
}
*/
 
 
int prime[1000000];
 
 
int main()
{
	int i, j;
	memset(prime, 1, sizeof(prime));
	for(i = 2; i < 1000; i++)
		if(prime[i])
			for(j = i*2; j < 1000000; j+=i)
				prime[j] = 0;
 
	int n;
	while(scanf("%d", &n) && n != 0)
	{
		int i;
		for(i = 2; i <= n/2; i++)
			if(prime[i] && prime[n-i])
			{
				printf("%d = %d + %d\n", n, i, n-i);
				break;
			}
		if(i == n/2+1)
			printf("Goldbach's conjecture is wrong.\n");
	}
	return 0;
}

POJ 3299 Humidex

完全的水题,题目繁多,不必去理解,只需要推导公式即可。
具体可以看讨论:

http://www.cppleyuan.com/viewthread.php?tid=917&extra=page%3D1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 #include <iostream>
#include <cmath>
using namespace std;
 
const double e = 2.718281828;
 
double fun1(double h, double d)//求T
{
 return h - (0.5555 * ((6.11 * pow(e, 5417.7530*(1/273.16-1/(d+273.16)))) - 10.0));
}
 
double fun2(double t, double d)//求H
{
    return t + (0.5555 * ((6.11*pow(e,5417.7530*(1/273.16-1/(d+273.16)))) - 10.0));
}
 
double fun3(double t, double h)//求D
{
    return 1/(1/273.16 - log(((h-t)/0.5555+10.0)/6.11)/5417.7530) - 273.16;
}
 
int main()
{
    char a1,a2;
    double t1,t2;
    while(scanf("%c", &a1) && a1 != 'E')
    {
		scanf("%lf %c %lf", &t1, &a2, &t2);
		//printf("%c %lf %c %lf\n", a1, t1, a2, t2);
        //输出
        //数据前后顺序,如T 30 D 15和D 15 T 30答案应该一样
        if(a1=='D'&&a2=='H')
			printf("T %.1f D %.1f H %.1f\n",fun1(t2,t1),t1,t2);
        else if(a1=='H'&&a2=='D')
            printf("T %.1f D %.1f H %.1f\n",fun1(t1,t2),t2,t1);
		else if(a1=='T'&&a2=='D')
			printf("T %.1f D %.1f H %.1f\n",t1,t2,fun2(t1,t2));
        else if(a1=='D'&&a2=='T')
			printf("T %.1f D %.1f H %.1f\n",t2,t1,fun2(t2,t1));
        else if(a1=='T'&&a2=='H')
			printf("T %.1f D %.1f H %.1f\n",t1,fun3(t1,t2),t2);
		else if(a1=='H'&&a2=='T')
			printf("T %.1f D %.1f H %.1f\n",t2,fun3(t2,t1),t1);   
	}
	return 0;
}

《C专家编程》读书笔记—第一章

本书的定位:介绍一些编程技巧,经验。

第一章:

①:赋值与相等的注意。(P1)

1
2
3
4
5
6
7
8
9
 if(<strong>3</strong> == i)   
 
//若写成= i则会报错,而原来若为if(i == 3)则写错不会报错。
 
{
 
    ...
 
}

②:未确定行为(unspecified)和未定义行为(undefined) (P12)

未确定的:在某些正确情况下的做法,但标准并未明确规定应该怎么做。

例如:参数求值的顺序

未定义的:在某些不正确情况下的做法,但标准并未规定该怎么做

          例如:当有一个符号整数溢出时该采取什么行动

③:最好不要省略原型的形参名  (P18)

尽管编译器并不理睬形参的名称,但他们经常能向程序员们传递一些有用的信息。

④:const指针与普通指针赋值的讨论   (P19)

1.  指针的参数传递约束条件:

因为参数传递类似于赋值,所以引用ANSI C 6.3.16.1:

两操作数都是指向限定或非限定内容兼容类型的指针,左端所指类型具有右端所指类型的所有限定符。

2.  ANSI C 6.1.2.5的例子讲到:

const float *类型不是一个限定的类型,它的类型是指向const限定的float类型的指针,即它是指向限定的类型的指针。

具体看《C专家编程》P19。