4 条题解
-
1
“要使每个人都能拿到苹果”指苹果数量不能为0。
“每个人拿到的苹果数都不同”指数据不能重复。
“至少应该有多少个”指要使求得的值最小。
既要数据不能重复,还要使答案最小,又不能从0开始。
那就从1开始枚举到 n 即为答案。
CODE 1: #include<bits/stdc++.h> using namespace std; int main(){ int a,b; b=0; cin>>a; for(int i=1;i<=a;i++) { b=b+i; } cout<<b; }
但是,此题可以进一步优化。
因为本题是从1枚举到 n ,每一个数间隔是1,又知道了共有 n 个数。
所以,这道题可以用等差数列求和的公式: CODE 2:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; cout<<n*(n+1)/2;//直接套公式
return 0;
} END.
-
1
#include<bits/stdc++.h> using namespace std; int geshu[1002];//存储每个人拿到的数量 int main(){ int N; cin >> N; for (int i = 1;i <= 1001;i++){ geshu[i] = i;//"最低标准"存入geshu数组 } int sum = 0; for (int i = 1;i <= N;i++){ sum+=geshu[i];//前N个累加至sum中 } cout << sum;//输出sum return 0; }
说实话,作者自己刚开始就是这么做的,不过后来发现:两个for可以合并。
#include<bits/stdc++.h> using namespace std; int main(){ int N; cin >> N; int sum = 0; for (int i = 1;i <= N;i++){ sum+=i;//累加 } cout << sum; return 0; }
实际上,这题最快的做法是用数学解决:
#include<bits/stdc++.h> using namespace std; int main(){ int N; cin >> N; cout << (1 + N) * N / 2;//等差数列求和公式 return 0; }
- 1
信息
- ID
- 72
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 57
- 已通过
- 41
- 上传者