2 条题解

  • 0
    @ 2025-12-7 12:55:51

    #include using namespace std; int main() { int n; cin >> n; int a = 0; for (int i = 0 ; i <= n ; i++) { a += i; } cout << a << endl; return 0; }

    • 0
      @ 2025-8-24 21:03:13

      自动搬运

      查看原文

      来自洛谷,原作者为

      avatar HiKou
      信息学奥赛狗都不学

      搬运于2025-08-24 21:03:12,当前版本为作者最后更新于2021-07-11 18:00:26,作者可能在搬运后再次修改,您可在原文处查看最新版

      自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

      以下是正文


      看题

      “要使每个人都能拿到苹果”指苹果数量不能为0。

      “每个人拿到的苹果数都不同”指数据不能重复。

      “至少应该有多少个”指要使求得的值最小。

      既要数据不能重复,还要使答案最小,又不能从0开始。

      那就从1开始枚举到 n 即为答案。

      CODE 1:

      #include<bits/stdc++.h>
      using namespace std;
      int main(){
      	int n,ans=0;
      	cin>>n;
      	for(int i=1;i<=n;i++)
      	ans+=i;//累加
      	
      	cout<<ans;//输出
      	
      	return 0;
      }
      

      但是,此题可以进一步优化。

      因为本题是从1枚举到 n ,每一个数间隔是1,又知道了共有 n 个数。

      所以,这道题可以用等差数列求和的公式:

      Sn=(1+n)×n2S_n=\dfrac{(1+n)×n} {2}

      CODE 2:

      #include<bits/stdc++.h>
      using namespace std;
      int main(){
      	int n;
      	cin>>n;
      	cout<<n*(n+1)/2;//直接套公式
      	
      	return 0;
      }
      

      END.

      • 1

      信息

      ID
      6929
      时间
      1000ms
      内存
      128MiB
      难度
      1
      标签
      递交数
      2
      已通过
      2
      上传者