6 条题解

  • 2
    @ 2024-5-2 16:56:03
    #include<iostream>
    using namespace std;
    int n,a[1005],num;
    int main()
    {
        cin >> n;
        for(int i=1;i<=n;i++)
        {
            cin >> a[i];
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(a[j]<a[j-1])
                {
                    swap(a[j],a[j-1]);
                    num++;
                }
            }
        }
        cout << num;
        return 0;
    }
    
    • 0
      @ 2023-7-28 22:46:57

      这题不难,写个冒泡排序,每交换一次就将计数变量+1,最后输出计数变量

      冒泡排序:从第一项开始,依次往后遍历,如果第i项>第i+1项,那么交换这两项的位置,总共遍历n轮(其实是n-1轮,但n轮也没有影响)

      #include <iostream>
      using namespace std;
      
      int main()
      {
          int n,ans = 0;
          cin >> n;
          int a[1005];
          for(int i = 0;i < n;i++)
              cin >> a[i];
          for(int i = 0;i < n;i++)
          {
              for(int j = 0;j < n - 1;j++)
              {
                  if(a[j] > a[j + 1])
                  {
                      swap(a[j],a[j + 1]);
                      ans++;
                  }
              }
          }
          cout << ans;
          return 0;
      }
      
      • 0
        @ 2023-7-28 16:46:04

        yasuo

        压缩版,还快

        #include <iostream>
        int main(){
            int q,a[2005],ans=0;std::cin>>q;
            for(int i=0;i<q;i++) std::cin>>a[i];
            for(int i=0;i<q-1;i++)
                for(int j=0;j<q-i-1;j++)
                    if(a[j]>a[j+1]){
                        std::swap(a[j],a[j+1]);
                        ans++;}
            std::cout<<ans;return 0;}
        
        • 0
          @ 2023-7-28 14:25:40

          解析:

          在冒泡排序过程中,每次比较相邻元素交换时,就累加交换次数。

          题解

          #include <bits/stdc++.h>
          using namespace std;
          int n, ans;
          int a[1005];
          int main()
          {
              cin >> n;
              for (int i = 1; i <= n; i++)
                  cin >> a[i];
              ans = 0;
              // 最多执行 n-1 轮冒泡
              for (int i = 1; i <= n - 1; i++)
                  // 执行一轮冒泡操作
                  for (int j = 1; j <= n - 1; j++)
                      // 比较相邻元素
                      if (a[j] > a[j + 1])
                      {
                          swap(a[j], a[j + 1]);
                          ans++; // 交换次数计数
                      }
              cout << ans;
              return 0;
          }
          
          
          • @ 2023-7-28 16:49:38

            老师您代码

            for (int j = 1; j <= n - 1; j++)
            

            我觉得可以运行上简化一下

            因为每次循环都会把最大的一个归位

            所以相应的每次第二层循环都可以少循环一次👀️

            for(int j=0;j<q-i-1;j++)
            
        • -1
          @ 2023-7-31 13:58:46
          #include <iostream>
          using namespace std;
          int n, a[1005], sum;
          int main()
          {
              cin >> n;
              for (int i = 1; i <= n; i++)
              {
                  cin >> a[i];
              }
              for (int i = 1; i < n; i++)
              {
                  for (int j = 1; j <= n - i; j++)
                  {
                      if (a[j] > a[j + 1])
                      {
                          int k = a[j];
                          a[j] = a[j + 1];
                          a[j + 1] = k;
                          sum++;
                      }
                  }
              }
              cout << sum;
              return 0;
          }
          
          • -1
            @ 2023-7-29 11:31:45

            这题很简单,先看代码,再复制:

            #include <iostream>
            #include <algorithm> // swap()函数的头文件;
            using namespace std;
            int a[1001], n, sum = 0; //定义全局变量数组a,这样我们就不用给数组a赋值了;
            int main()
            {
                cin >> n;
                for (int i = 1; i <= n; i++) cin >> a[i]; //输入整数;
            
                // 冒泡排序;
                for (int i = 1; i <= n - 1; i++)
                {
                    for (int j = 1; j <= n - 1; j++)
                    {
                        if (a[j] > a[j + 1])
                        {
                            swap(a[j], a[j + 1]); //交换两数的函数swap()(别忘写头文件);
                            sum++; // 每交换一次就将计数变量加一;
                        }
                    } 
                }
            
                cout << sum; // 输出;
                return 0;
            }
            

            思路:冒泡排序时,两数每交换一次,就将sum(计数变量)加一;

            记得👍 哦
            • 1

            信息

            ID
            362
            时间
            1000ms
            内存
            256MiB
            难度
            4
            标签
            (无)
            递交数
            698
            已通过
            341
            上传者