2 条题解

  • 1
    @ 2021-8-27 13:55:05
    #include <bits/stdc++.h>
    using namespace std;
    
    int n,minn = INT_MAX,x,ans;
    
    int main()
    {	
    	cin >> n;
    	for(int i=1;i<=n;i++)
    	{
    		cin >> x;
    		minn = min(minn,x);
    		ans = max(ans,x - minn);
    	}
    	cout << ans;
    	return 0;
    } 
    
    • 0
      @ 2021-8-26 21:13:37

      有人似乎不理解INT_MAX和INT_MIN,那我就先讲讲这两个东西

      INT_MAX和INT_MIN在标准头文件limits.h中定义。

      #define INT_MAX 2147483647
      #define INT_MIN (-INT_MAX - 1)
      

      在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。

      说白了,INT_MAX就是int型的最大值,INT_MIN是int型的最小值。


      这道题好水啊

      我的代码和前面几位雷同(非抄袭),都是能AC的,如果只是想通过该题,可以看看前面几位,不必看下去了。但如果想明白该题思路,那我建议你看下去(好像就我一个人会写这么多?)

      核心思路:将变量minn不断取最小值,也就是minn = min(minn, x);,另一个变量maxn不断取每一个数减minn的最大值,maxn = max(maxn, x - minn);

      知道了思想,就可以开始写了awa

      //祖传万能头
      #include <bits/stdc++.h>
      
      //命名空间
      using namespace std;
      
      //minn要往下取,所以取INT_MAX;maxn要往上取,所以取INT_MIN
      int n, x, minn = INT_MAX, maxn = INT_MIN; 
      
      //主函数
      int main()
      {
          //输入加速
          ios::sync_with_stdio(false);
          cin.tie(0);
              
          //输入天数
          cin >> n;
      
          //输入并计算
          for (int i = 0; i < n; i++)
          {
              //输入每天资金价值变化
              cin >> x;
      
              //计算资金价值最小值
              minn = min(minn, x);
              //计算最多能挣多少钱,即资金价值最大值 - 资金价值最小值
              maxn = max(maxn, x - minn);
          }
      
          //输出
          cout << maxn << endl;
          
          //华丽地结束
          return 0;
      }
      

      一些可能会问的问题及回答

      Q:为什么不用数组? A:没必要。还占空间。

      Q:为什么要加速? A:我的代码模板。懒得改[doge]

      Q:为什么只用一个循环? A:没必要(其实是因为懒)。

      • 1

      信息

      ID
      1229
      时间
      1000ms
      内存
      256MiB
      难度
      4
      标签
      递交数
      152
      已通过
      75
      上传者