题解:对x/5向上取整就是答案!
标程:
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
cout << (x + 4) / 5 << '\n';
}
题解:其中有一种整人的情况,就是全部都是0,即给出的巧克力棒每一块都不包含坚果,这种情况下的切分方式为0种。
再讨论一般情况,根据题意可知,在相邻的两个坚果之间某个位置一定要切一刀,那么光这两个坚果之间的切分方式就有P(i)-P(i-1)种(即两个坚果位置之间的间隔)。
标程:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int prev = -1;
long long result = 0;
for (int i = 0; i < n; i++) {
int v;
cin >> v;
if (v == 1) {
if (prev == -1) {
result = 1;
} else {
result *= i - prev;
}
prev = i;
}
}
cout << result << endl;
}
我的想法:特判是一样的,如果都是0,输出0,处理方式不一样,用了前缀和,最后将从1开始(除了最后一个数)每个不同的数出现的次数相乘。
我的代码:
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN = 100 + 5;
int a[MAXN];
int cnt[MAXN];
int main() {
int n;
cin >> n;
memset(a, sizeof(a), 0);
memset(cnt, sizeof(cnt), 0);
for(int i = 0; i < n; i++) {
cin >> a[i];
a[i] = (i > 0 ? a[i-1]+a[i]: a[i]);
cnt[a[i]]++;
}
int maxN = a[n-1]-1;
long long ans = 1;
for(int i = 1; i <= maxN; i++) {
ans *= cnt[i];
}
if(a[n-1] == 0) cout << 0 << endl;
else cout << ans << endl;
return 0;
}