解题思路:这是常规思路,类似按身高排队一样,已经排好的队,你想插进去,找到比你矮的和比你高的前后两个人,之后的人往后退一步就行了。
首先是输入只含有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分
151 人评分
#include <stdio.h> void show_arr(const int *pt); void sort(int *arr); void clau(int *pt, int n); int main(void) { int arr_length; int arr[9] = {1, 7, 8, 17, 23, 24, 59, 62, 101}; sort(arr); show_arr(arr); putchar('\n'); arr_length = sizeof(arr) / sizeof(int); printf("%5d", arr_length); clau(arr, arr_length); return 0; } void show_arr(const int *pt) { int i; for (i = 0; i < 10; i++) { printf("%5d", pt[i]); } } void clau(int *pt, int n) { int x; puts("Please enter a numbers:"); scanf("%d", &x); *(pt + 1) = x; sort(pt); show_arr(pt); } void sort(int *arr) { int i, j;
#include<stdio.h> int main(){ int a[10]; int i; int n=sizeof(a)/sizeof(a[0]) ; for(int i=0;i<9;i++){ scanf("%d",&a[i]); } int x; scanf("%d",&x); for(;x>a[i]&&i!=n;i++) { printf("%d\n",a[i]); } printf("%d\n",x); for(;x<a[i];i++){ printf("%d\n",a[i]); } return 0; } 答案没问题啊,为什么总说我答案错误
#include<stdio.h> int main() { int a[9],b[10],i,j,temp=0; printf("请输入9个整数:\n"); for(i=0;i<9;i++) scanf("%d",&a[i]); for(j=9;j>0;j--) { for(i=0;i<9;i++) { if(a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } for(i=0;i<9;i++) printf("%d ",a[i]); printf("\n"); printf("请输入要插入的整数:\n"); scanf("%d",&b[9]); for(i=0;i<9;i++) b[i]=a[i]; for(j=10;j>0;j--) { for(i=0;i<10;i++) { if(b[i]>b[i+1]) { temp=b[i]; b[i]=b[i+1]; b[i+1]=temp; } } } for(i=0;i<10;i++) printf("%d ",b[i]); return 0; }
这个有问题吧,如果你由大到小的输入数字,它就会报错,例如: 66 55 54 53 52 51 49 48 46 50 我觉得这个可以参考一下1023题,如果是上述情况的话只用反向输出排好的数就行了。
#include<stdio.h> #include<string.h> int main() { int a[10]; int i,m=0,t; for(i=0;i<9;i++) {scanf("%d",&a[i]); } getchar(); scanf("%d",&a[9]); for(i=0;i<9;i++) { if(a[9]>a[i]) { if(a[9]<a[i+1]) { t=a[9]; for(m=9;m<=i+1;m--) a[m]=a[m-1]; a[i+1]=t; } } } for(i=0;i<10;i++) printf("%d\n",a[i]); } 输出结果不对·,循环不知道哪出问题了,请求大佬
#include <stdio.h> #include <malloc.h> int main() { int len, i, add, e, j, t; len=9; int *p = (int*)malloc(sizeof(int) * len); for(i=0; i<len; ++i) scanf("%d", &p[i]); printf("\n"); scanf("%d", &e); j=0; //给插入的元素选位置 while(e>p[j]) { j++; } add=1; len+=add; //数组长度改变 p=realloc(p, (sizeof(int)*len)); //重新分配动态内存 t=len; while(t>5) //插入点后面的元素顺序后移 { p[t]=p[t-1]; t--; } p[j]=e; //将新插入的元素放入数组队列 for(i=0; i<len; ++i) printf("%d\n", p[i]); return 0; } 请教各位大佬,动态构造数组的方法是不是用的不对?
#include <stdio.h> int main() { int a[10];int i =0;int x;int t; a[9] = 0; for(i=0;i<9;i++){ scanf("%d",&a[i]); } scanf("%d",&x); for(i=0;i<9;i++){ if(x>a[i-1]&&x<a[i]){ t = i;break; } } for(i=8;i>t;i--){ a[i+1]=a[i]; } a[t] = x; for(i=0;i<10;i++){ printf("%d ",a[i]); }return 0; } 有没有大哥帮我看一下我这样写是哪一步出了问题
#include <stdio.h> int main(){ int a[10]; int i=0; int t; int x; for(i=0;i<9;i++){ scanf("%d",&a[i]); } a[9]=0; scanf("%d",&x); //最前面 if(x<=a[0]){ for (i=9;i>0;i--){ a[i]=a[i-1]; } a[0]=x; } //最后面 else if(x>=a[8]){ a[9]=x; }else{ //中间 for (i=0;i<10;i++){ if(x>=a[i] && x<=a[i+1]){ t=i+1; break; } } 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; }