7 条题解

  • 1
    @ 2024-5-1 9:32:09

    别搞冒泡排序和选择排序了,直接用sort不香吗?

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n, m, a[1005];
        cin >> n >> m;
        for (int i = 1; i <= m; i++)
        {
            cin >> a[i];
        }
        a[m + 1] = n;
        sort(a + 1, a + m + 2);
        for (int i = 1; i <= m + 1; i++)
        {
            cout << a[i] << " ";
        }
        return 0;
    }
    
    • 1
      @ 2023-9-24 14:55:30
      #include <bits/stdc++.h>
      using namespace std;
      int m, a[1005], n;
      int main()
      {
      	cin >> n >> m;
      	for (int i = 1; i <= m; i++)
      		cin >> a[i];
      	a[m + 1] = n;
      	sort (a + 1, a + m + 2);
      	for (int i = 1; i <= m + 1; i++)
      		cout << a[i] << " ";
      	return 0;
      }
      

      直接用sort,我真聪明…………

      • 1
        @ 2023-7-18 17:58:54

        AC代码1:二分

        #include <bits/stdc++.h>
        using namespace std;
        int l,r,mid,a[1005],m,n,ans;
        int main()
        {
            cin >> m >> n;
            for (int i = 1;i <= n;i++)
            {
                cin >> a[i];
            }
            l = 1;
            r = n;
            while (l <= r)
            {
                mid = (l + r) / 2;
                if (a[mid] <= m)
                {
                    ans = mid;
                    l = mid + 1;
                }
                else
                {
                    r = mid - 1;
                }
            }
            for (int i = n;i > ans;i--)
            {
                a[i + 1] = a[i];
            }
            a[ans + 1] = m;
            for (int i = 1;i <= n + 1;i++)
            {
                cout << a[i] << " ";
            }
        }
        

        AC代码2:sort()函数排序

        #include <bits/stdc++.h>
        using namespace std;
        int m,n,a[1005];
        int main()
        {
            cin >> m >> n;
            for (int i = 1;i <= n;i++)
            {
                cin >> a[i];
            }
            a[n + 1] = m;
            sort(a + 1,a + n + 2);
            for (int i = 1;i <= n + 1;i++)
            {
                cout << a[i] << " ";
            }
            return 0;
        }
        
        • 1

          这道题首先要定义n,m这两个变量分别表示要插入的数和这个数列有几项,再定义一个h来帮助, 然后定义一个数组,大小是1000。我们再写一个for语句来输入数组里的每一项。接着写一个for 语句先判断数组a[i+1]项的大小是不是大于n,如果不是就输出a[i],将h加1。如果是就输出a[i] 项的值和n,然后跳出循环。跳出循环后进入另一个循环,从h+1开始到m,依次输出a[i]项的值。 然后就做完了。

          #include <iostream>
          using namespace std;
          int a[1000];
          int main()
          {
          	int n,m,h=0;
          	cin>>n>>m;
          	for(int i=0;i<m;i++)
          	{
          		cin>>a[i];
          	}
          	for(int i=0;i<m;i++)
          	{
          		if(a[i+1]>n)
          		{
          			cout<<a[i]<<" ";
          			cout<<n<<" ";
          			break;
          		}
          		cout<<a[i]<<" ";
          		h++;
          	}
          	for(int i=h+1;i<m;i++)
          	{
          		cout<<a[i]<<" ";
          	}
          	return 0;
          }
          • 0
            @ 2023-4-14 21:55:15
            #include<bits/stdc++.h>
            using namespace std;
            int n,m,x;
            int main()
            {
                cin>>m>>n;
                for (int i=1;i<=n;i++)
                {
                    cin>>x;
                    if (m<=x)
                    {
                        cout<<m<<" ";
                        m=10000007;
                    }
                    cout<<x<<" ";
                }
                return 0;
            }
            • 0
              @ 2022-4-29 19:56:39

              这道题我们甚至可以直接在输入的时候进行插入 可以看到,我们用cin后直接进行判断,如果插入的数字小于等于我们给出的数并判断是否运行过这个代码(flag==0),那么就插入并把flag调到一,表示运行过这段代码。 之后直接打印出这个列表(在代码里去掉了)就好了

              
              int flag = 0;
              for(int i = 0;i <n;i++)
              	{
              		cin >> x;
              		a[i+flag] = x;
              		if(a[i]<=num&&flag==0)
              		{
              			flag = 1;
              			a[i+1] = num;
              		}
              	}
              
              
              • 0
                @ 2022-4-28 20:25:46

                这道题首先保证从小到大排列,然后需要插入到合适的位置。

                那我们就需要循环遍历找到那个位置,找到那个位置以后,我们可以利用输出的技巧,先输出 小于它的,然后单独输出它,然后输出后面的部分。

                这里找它的位置,我们就是第二个for循环的代码,如果a[i]<na[i]<n,我们就一直更新temp

                最终无法更新就是那个要插入的位置。

                然后把输出分成三部分,详见后面2个for循环。

                #include<iostream>
                using namespace std;
                int main()
                {
                	int n,m,a[1005];
                	cin>>n>>m;
                	for(int i=0;i<m;i++) 
                	{
                		cin>>a[i];
                	}
                	int temp=n;
                	for(int i=0;i<m;i++)
                	{
                		if(a[i]<n)
                		{
                			temp=i+1;
                		}
                	}
                	for(int i=0;i<temp;i++)
                	{
                		cout<<a[i]<<" ";
                	}
                	cout<<n<<" ";
                	for(int i=temp;i<m;i++)
                	{
                		cout<<a[i]<<" ";
                	}
                	return 0;
                }
                
                • 1

                【入门】元素插入有序数组

                信息

                ID
                161
                时间
                1000ms
                内存
                16MiB
                难度
                4
                标签
                递交数
                180
                已通过
                86
                上传者