9 条题解

  • 5
    @ 2022-9-21 20:47:41

    题前吐槽

    2015年,第一题也不应该这么垃圾啊!!!

    也就弄点简单模拟。。。 咋有凑数的题解(还3条?

    其实这数很小,O(n2)O(n^2) 瞎搞都行(循环k天,傻的找不到规律只能每次循环都找一下加几个金币,我想应该没人这样搞把。。。)。

    ACAC CodeCode 都这么好抄了,还有Copy按钮,能不能给个顶再看。。。

    题解

    设置每轮天数 dd,最开始第一轮为 11。如果剩余的天数m大于等于 dd,则这一轮完整加入,获取金币 ddd * d。如果剩余不足,则是剩余天数每天 dd 个金币,获取 mdm * d 个金币。

    #include <bits/stdc++.h>
    using namespace std;
    int d, m, k, sum;
    int main()
    {
        scanf("%d", &k); // 输入
        d = 1, m = k; // 设置初始第一轮的值
        while (m >= d) // 如果能够完整整完一轮
        {
            sum += d * d; // 一轮金币
            // 注意这里 m -= d,减的是没有++之前的d,否则会多减一天
            m -= d; // 天数也要减,不然无限循环了
            d++; // 别忘了下一轮天数+1
        }
        sum += m * d; // 剩余天数*d,如果剩余0天其实也加了0,所以不用特判
        printf("%d\n", sum);
        return 0;
    }
    

    ACAC CodeCode

    #include <bits/stdc++.h>
    using namespace std;
    int d, m, k, sum;
    int main()
    {
        scanf("%d", &k);
        d = 1, m = k;
        while (m >= d)
        {
            sum += d * d;
            m -= d;
            d++;
        }
        sum += m * d;
        printf("%d\n", sum);
        return 0;
    }
    
    • 2
      @ 2023-10-6 22:07:32

      虽然没有别人写的好,但绝对是最易懂的

      #include <bits/stdc++/h>
      using namespace std;
      int x,sum=0,d=1;//x为天数,sum为金币,d为每天比原来每天多获得的金币数 
      int main()
      {
      	cin>>x;
      	for (int i=1;i<=x;i++){
      		x-=i;
      		sum+=d*d;
      		d++;//金币每天加上d的平方,也就是d天,每天d枚,天数减i
      	}
      	cout<<sum+x*d;//最后算上剩余的x乘加的最多一次的d 
      	return 0;
      }
      
      • 2
        @ 2023-9-2 18:28:43

        笑笑不说话

        #include<bits/stdc++.h>
        using namespace std;
        int k,sum,i=1;
        int main(){
            cin>>k;
            while(k>=0){
                if(k-i<0){
                    for(int j=1;j<=k;j++){
                        sum+=i;
                    }
                }else{
                    for(int j=1;j<=i;j++){
                        sum+=i;
                    }
                }k-=i;
                i++;
            }cout<<sum;
            return 0;
        }
        
        • 2
          @ 2022-8-26 20:06:35

          😄 模拟变量coin和day的变化,事先不知道要发几轮,但是知道天数k,那就记录day,day == k的时候结束:

          int k, coin = 0, day = 0;
          cin >> k;
          for(int i = 1; ; i++){  // 外循环无终止条件
              for(int j = 1; j <= i; j++){
                  coin += i; 
                  day++;
                  if (day == k)
                  {
                      cout << coin;
                      return 0;
                  }
              }
          }
          
          • 1
            @ 2023-8-28 17:32:50
            #include <iostream>
            using namespace std;
            int sum,k,cnt=0,x=1;
            int main()
            {
                cin >> k;
                for (int i=1;i<=k;i++)
                {
                    
                    cnt++;      
                    if(cnt==x+1)
                    {
                        x++;
                        cnt=1;
                    } 
                    sum+=x;
                }
               
                cout << sum;
                return 0;
            }
            
            • 0
              @ 2023-7-27 0:04:11
              #include <iostream>
              using namespace std;
              int main()
              {
              	int k, i = 0, n = 0, sum = 0, flag = true;
              	cin >> k;
              	while (flag)
              	{
              		n++;
              		for (int j = 1; j <= n; j++)
              		{
              			i++;
              			if (i <= k)
              			{
              				sum += n;
              			}
              			else
              			{
              				flag = false;
              				break;
              			}
              		}
              	}
              	cout << sum;
              	return 0;
              }
              
              • -1
                @ 2022-11-25 23:07:48

                同志们,居然没有Python的题解?好吧,我发一个!


                思路

                这题目就是一个要点:金币增加的天数(1,3,6,10……)是一个二阶的等差数列,所以可以算出来在前n天内包含几个涨薪水(即比上一次多出一个金币)的日子,然后判断是否是涨薪水的日子,是的话就涨薪水(这不废话吗)。


                代码

                a=int(input())
                k=[]
                s=0
                d=1
                #二阶等差数列需要两个变量:(s3-s2)-(s2-s1)=d(定值)
                while s<a:
                    s+=d
                    d+=1
                    k.append(s)
                s=0
                d=1
                for i in range(1,a+1):
                    s+=d
                    if i in k:
                         #涨工资
                        d+=1
                print(s)
                

                Loading:19/100……

                • -4
                  @ 2022-9-9 20:12:29

                  #include <iostream> using namespace std; int n, q, c, s; int main() { cin >> n; c = q = 1; for (int i = 1; i <= n; i++) { s += c; q--; if (q == 0) { c++; q = c; } } cout << s; return 0; }

                  • -4
                    @ 2022-9-1 20:12:36
                    • 1

                    [入门][NOIP2015 普及组] 金币

                    信息

                    ID
                    1404
                    时间
                    1000ms
                    内存
                    256MiB
                    难度
                    4
                    标签
                    递交数
                    655
                    已通过
                    305
                    上传者