7 条题解
-
1
别搞冒泡排序和选择排序了,直接用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
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
这道题首先保证从小到大排列,然后需要插入到合适的位置。
那我们就需要循环遍历找到那个位置,找到那个位置以后,我们可以利用输出的技巧,先输出 小于它的,然后单独输出它,然后输出后面的部分。
这里找它的位置,我们就是第二个for循环的代码,如果,我们就一直更新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
- 标签
- 递交数
- 184
- 已通过
- 90
- 上传者