解题思路:这是常规思路,类似按身高排队一样,已经排好的队,你想插进去,找到比你矮的和比你高的前后两个人,之后的人往后退一步就行了。
首先是输入只含有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分
146 人评分
#include<stdio.h> int main() { int n; int array[10]; for(int i=0;i<9;i++) { scanf("%d",&array[i]); } scanf("%d",&n); for(int i=0;i<9;i++) { if(array[i]>n) { for(int j=9;j>i;j--) { array[j]=array[j-1]; } array[i]=array[i+1]; array[i]=n; break; } } for(int i=0;i<10;i++) { printf("%d\n",array[i]); } }
先给n找到合适的位置放入,依次遍历,把最大的值留给n,最后再把n放在数组末尾 #include<stdio.h> int main() { int a[10],i,n,tmp; for(i=0;i<9;i++){ scanf("%d",&a[i]); } //printf("\n"); scanf("%d",&n); for(i=0;i<9;i++){ if(n<a[i]){//n是小数,把a[i]换成n tmp=a[i];//把n放置进去了 a[i]=n; n=tmp; } }//n变为最大数 ,但n此时还在数组之外 a[9]=n;//第十个数字n赋值进去 for(i=0;i<10;i++){ printf("%d\n",a[i]); } return 0; }
#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); if(x<=a[0]) t=0; else if(x>=a[8]) t=9; else { for (i=0;i<9;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; }
洛顾劢 2022-11-02 22:30:13 |
为什么后面只能是i--,我用i++就是错的,一直搞不明白
假如插入的那个数比原始数列的第一个数都要小,或者比第九个数都要大,这两种情况该怎么判断呢?
垃圾 2022-09-29 21:58:45 |
#include <stdio.h> #include <stdlib.h> int main(void) { 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; } } 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=9;i>t;i--) { a[i]=a[i-1]; } a[t]=x;} for(i=0;i<10;i++) { printf("%d ",a[i]); } }
垃圾 2022-09-29 21:58:58 |
这样可以吗
垃圾 2022-09-29 21:59:38 |
哈哈哈
垃圾 2022-09-29 22:03:17 |
为什么是乱码呀,我加了两个判断条件
#include<stdio.h> int main(void) { int a[10],i,j,n; for(i=0;i<9;i++) scanf("%d",&a[i]); scanf("%d",&n); for(i=0;i<9;i++) { if(a[i]>n&&n>=a[i-1]) j=i; } for(i=8;i>=j;i--) a[i+1]=a[i]; a[j]=n; for(i=0;i<10;i++) printf("%d ",a[i]); return 0; }
Joker 2022-10-27 19:04:52 |
a[i-1] ,当i=0时出错
#include<stdio.h> #include<math.h> int main() { int a[10],b; int i,j; for(i=0;i<9;i++){ scanf("%d",a+i); } scanf("%d",&b); if(b<=a[0]){ for(i=9;i>=1;i--){ a[i]=a[i-1]; } a[0]=b; } else if(a[0]<b&&b<a[8]){ for(i=0;i<=7;i++){ if(a[i]<=b&&b<=a[i+1]){ for(j=8;j>=i+1;j--){ a[j+1]=a[j]; } a[i+1]=b;break; } } } else { a[8]=b; } for(i=0;i<=9;i++){ printf("%d\n",a[i]); } }
#include<stdio.h> int main() { int a[12], b; scanf("%d %d %d %d %d %d %d %d %d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &a[9]); scanf("%d", &b); for (int i = 1;i <= 9;i++) { printf("%d\n", a[i]);//当未满足插入条件时依次输出值 if (b >= a[i] && b < a[i + 1])//当满足插入的条件时 { printf("%d\n", b);//输出插入的值 for (int j = i + 1;j <= 9;j++)//从i+1开始,将插入位置后面的数据输出 { printf("%d\n", a[j]); } return 0;//结束 } } return 0; }
wzc2022 2022-06-26 21:16:16 |
#include<stdio.h> int main( ) { int a[10],i; for(i=0;i<9;i++) { scanf("%d",&a[i]); //先定义10个数组元素 输入前九个 后一个赋为 0; } a[9]=0; int x;//n大于数组第x个元素 int n; scanf("%d",&n); for(i=0;i<9;i++) { if(x>=a[i]&&x<=a[i+1]) //查询n应该赋予的位置 int cnt=i+1; } for(i=9;i>t;i--) { a[i]=a[i-1]; 大于n的元素位置向先往后挪一位 } a[t]=x; //然后对把n赋给应该插入的位置 for(i=0;i<10;i++) printf("%d",&a[i]); return 0; }
Joker 2022-10-27 19:26:30 |
你这只是为了打印
采用与数组内部数据一一比较,将较大的数替换输入的数据,然后以此类推,最大的数复制给数组最后一位,最后进行输出。 #include<stdio.h> int main() { int N[10],i,t,a; for(i=0;i<9;i++) { scanf("%d",&N[i]); } scanf("%d",&t); for(i=0;i<9;i++) { if(t>N[i]) { continue; } else { a=N[i]; N[i]=t; t=a; } } N[9]=t; for(i=0;i<10;i++) { printf("%d\n",N[i]); } return 0; }
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1051 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1195 |
WU-图形输出 (C++代码)浏览:800 |
WU-C语言程序设计教程(第三版)课后习题11.12 (C++代码)(想学链表的小伙伴可以看看)浏览:898 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:575 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:567 |
The 3n + 1 problem (C语言代码)浏览:548 |
矩阵加法 (C语言代码)浏览:1719 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1148 |
小O的乘积 (C语言代码)浏览:1009 |