算法竞赛入门经典[紫书]习题笔记(第二章)

紫书第二章习题代码及笔记。主要是想练习下c++的使用,这里纯粹作为记录,有错误欢迎指出,多加交流。

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <math.h>
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <pwd.h>

// 水仙花

int main(){
int a, b, c;
for(int i=100; i<=999;i++){
a = i / 100;
b = (i % 100)/10;
c = (i % 100)%10;
if((pow(a,3)+pow(b,3)+pow(c,3)) == i)
printf("%d\n", i);
}
return 0;
}



// 韩信点兵
/*
int main(){
int a, b, c, n=1;
while(scanf("%d %d %d", &a, &b, &c) == 3){
int get = 0;
for(int i=10;i<=100; i++ ){
if((i%3==a)&&(i%5==b)&&(i%7==c))
{
get = 1;
printf("Case %d: %d\n", n, i);
break;
}


}
if(get == 0) printf("Case %d: %s\n", n, "No answer");
n++;
}
return 0;
}

*/

// 倒三角形
/*
int main(){
int n;
scanf("%d", &n);
int a=n, b=0; // a控制#的数量, 把控制前后空格的数量
do{
for(int j=1;j<=b; j++)
printf("%s", " ");
for(int i=1; i<=2*a-1;i++ )
{
printf("%s", "#");
}
for(int j=1;j<=b; j++)
printf("%s", " ");

a -= 1;
b++;

printf("\n");


}while ((a>=1)&&(a<=20));
return 0;
}
*/

// 子序列的和
/*
int main(){
int n, m, num=0;
while ((scanf("%d %d", &n, &m) == 2)&&m&&n){
num += 1;
float r=0.0;
for(float i=n; i<=m; i++){
r += 1 / (i*i);
}
printf("Case %d: %.5f\n", num, r);
}
return 0;
}

*/

// 分数化小数
// 偷懒~
/*
int main(){
int a, b ,c;
while (scanf("%d %d %d", &a, &b, &c)){
float r;
r = a/((float) b);
std::cout<<std::setprecision(c)<<std::fixed<<r<<"\n";
}
return 0;
}
*/



// 排列
// 不会...

//思考题2
/*
int main(){
double i;
// freopen("output.txt", "w", stdout);
for(i=0; i != 10; i += 0.1){
printf("%.1f\n", i);
}
return 0;
}
*/

最后的思考题,原因在与10.0属于float, 不等于10[int],所以会一直输出打印的内容,但开始并未出现0.1,0.2,…等的递增的情况,debug发现没有问题,最后发现原因是输出太多内容,将上面的内容掩盖,通过写入文件后再查看,发现打印还是正常的。

击蒙御寇