比赛详情 链接:编程思维周练(1) 赛制:OI 难度:入门 题目解答 A : [NOIP2002 普及组] 级数求和 12345678910111213#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 普及组] 棋盘问题 暴力枚举 123456789101112131415161718192021222324#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;} 公式求解 123456789101112131415#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 普及组] 数字反转 12345678910111213141516171819202122232425#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 普及组] 买铅笔 12345678910111213141516171819202122#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 : 数字反转(升级版) 12345678910111213141516171819202122232425262728293031323334353637383940414243#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; }