比赛详情

题目解答

A : [NOIP2002 普及组] 级数求和

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;

int main(){
int k = 0, n = 0;
double sum = 0;
scanf("%d", &k);
while(sum <= k){
sum += 1.0/++n;
}
printf("%d", n);
return 0;
}

B : [NOIP1997 普及组] 棋盘问题

暴力枚举

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
using namespace std;

int main(){
int n = 0, m = 0;
int ans1 = 0, ans2 = 0;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
for(int k = i; k <= n; k++){
for(int p = j; p <= m; p++){
if(k-i == p-j){
ans1++;
}
else{
ans2++;
}
}
}
}
}
printf("%d %d", ans1, ans2);
return 0;
}

公式求解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
using namespace std;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int sum2=((m+1)*(n+1)*m*n)/4;
int sum1=0;
for(;n>=1&&m>=1;n--,m--)
{
sum1+=m*n;
}
printf("%d %d\n",sum1,sum2-sum1);
return 0;
}

C : [NOIP2011 普及组] 数字反转

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
#include<iostream>
using namespace std;

int main(){
string str;
cin >> str;
if(str == "0"){
printf("0");
return 0;
}
int len = str.length();
while(str[--len] == '0');
if(str[0] == '-'){
printf("-");
for(int i = len; i > 0; i--){
printf("%c", str[i]);
}
}
else{
for(int i = len; i >= 0; i--){
printf("%c", str[i]);
}
}
return 0;
}

D : [NOIP2016 普及组] 买铅笔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;

const int MAX_INT = 2e10;

int main(){
int n = 0, ans = MAX_INT;
scanf("%d", &n);
for(int i = 0; i < 3; i++){
int a = 0, b = 0, s = 0;
scanf("%d%d", &a, &b);
if(n % a == 0){
s = n / a * b;
}
else{
s = (n / a + 1) * b;
}
ans = min(ans, s);
}
printf("%d", ans);
return 0;
}

E : 数字反转(升级版)

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
#include<iostream>
using namespace std;
string s;
char p = 0;
int cnt = 0;
int main(){
cin >> s;
for(int i = 0; i < s.size(); i++){
if(s[i] >= '0' && s[i] <= '9'){
cnt++;
}
else{
p = s[i];
break;
}
}
int x = cnt;
cnt--;
while(s[cnt] == '0' && cnt > 0){
cnt--;
}
for(int i = cnt; i >= 0; i--){
cout << s[i];
}
if(p == 0){
return 0;
}
cout << p;
if(p == '%'){
return 0;
}
int m = s.size() - 1;
while(s[x + 1] == '0' && x < m - 1){
x++;
}
while(s[m] == '0' && m > x + 1){
m--;
}
for(int i = m; i > x; i--){
cout << s[i];
}
return 0;
}