原题链接:[编程入门]数组插入处理
解题思路:这是常规思路,类似按身高排队一样,已经排好的队,你想插进去,找到比你矮的和比你高的前后两个人,之后的人往后退一步就行了。
首先是输入只含有9个元素的数组a[10],用for循环依次输入。接着输入插入的数字x,将x与数组元素比较,当a[i]<=x<=a[i+1]时,记录x应该插入的位置t=i+1。但是插入x之前要把元素往后移位,从后往前直到位置t,最后把x赋值给a[t],输出排好的a[10]。
注意事项:注意移位从后往前,不然从前往后会使数据丢失。找插入位置时注意break退出遍历循环,不然肯定是最后面。
参考代码:
#include <stdio.h>
int main()
{
int a[10];
int i=0;
int t;
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}
a[9]=0;
int x;
scanf("%d",&x);
for (i=0;i<10;i++)
{
if(x>=a[i] && x<=a[i+1])
{
t=i+1;
break;
}
}
// printf("%d\n",t);
for (i=9;i>t;i--)
{
a[i]=a[i-1];
}
a[t]=x;
for (i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}0.0分
101 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
int main() { int sz = 0; int a = 0; int arr[] = { 1,7 ,8, 17, 23, 24, 59, 62, 101 }; scanf("%d", &a); sz = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < sz; i++) { if (a < arr[i+1]&&a>arr[i]) { printf("%d\n", arr[i]); printf("%d\n", a); continue; } printf("%d\n", arr[i]); } return 0; }@uq_62649998794 int main() { int sz = 0; int a = 0; int arr[] = { 1,7 ,8, 17, 23, 24, 59, 62, 101 }; scanf("%d", &a); sz = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < sz; i++) { if (a < arr[i+1]&&a>arr[i]) { printf("%d ", arr[i]); printf("%d ", a); continue; } printf("%d ", arr[i]); } return 0; }我自己做的倒序,乱序都能用 #include<stdio.h> int main() { int n[10],i; int tmp=0,z=0,x=0,g=0; for(i=0;i<9;i++) { scanf("%d",&n[i]); } scanf("%d",&n[9]); for(z=0;z<=9;z++) { for(x=0;x<=9;x++) { if(n[x]>n[x+1]) { tmp=n[x]; n[x]=n[x+1]; n[x+1]=tmp; } } } if(n[0]<n[9]) for(g=0;g<10;g++) {printf("%d\n",n[g]);} else for(g=10;g<0;g--) {printf("%d\n",n[g]);} return 0; }为啥我的错了 #include <iostream> #include<vector> using namespace std; int main() { vector <int> str; int number; while (1) { cin >> number; str.push_back(number); if (cin.get() == '\n') break; } int len = str.size(); for (int i = 0; i < len; i++) { cout << str[i]; } cout << '\n'; int m; cin >> m; str.push_back(m); len = str.size(); for (int i = 0; i < len-1; i++) { int n; if (str[i] >= m) { n = str[i]; str[i] = m; str[i+1] = n; } } for (int i = 0; i < len; i++) { cout << str[i]; } return 0; }@jeff if(a[i]>n) { b[i]=n; b[i+1]=a[i]; }当数组a里面的元素>50时数组b都会被复值为50,第一次b[i]为50下一次循环b[i+1]为50#include<stdio.h> int main() { int a[9]; for(int i=0;i<9;i++) { scanf("%d",&a[i]); } int b[10]; int n; scanf("%d",&n); for(int i=0;i<9;i++) { if(a[i]<n) { b[i]=a[i]; } if(a[i]>n) { b[i]=n; b[i+1]=a[i]; } } for(int i=0;i<10;i++) { printf("%d ",b[i]); } return 0; } 想请问一下为什么这样子写,插入的50的后面出现了好几个相同的数字50呢?#include<stdio.h> int main(){ int arr[10]; for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } for (int i =0;i<10-1;i++){ for (int j = 0;j<10-i-1;j++){ if (arr[j+1] < arr[j]){ int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } for (int k = 0; k < 10; k++) { printf("%d ", *(arr + k)); } return 0; }# include <stdio.h> int main() { int i, n, a[9]; for (i = 0; i < 9; i++) { scanf("%d", &a[i]); } scanf("%d", &n); for (i = 0; i < 9; i++) { if (a[i] <= n) printf("%d\n", a[i]); else { printf("%d\n", n); for (; i < 9; i++) printf("%d\n", a[i]); } } return 0; }