解题思路:这是常规思路,类似按身高排队一样,已经排好的队,你想插进去,找到比你矮的和比你高的前后两个人,之后的人往后退一步就行了。
首先是输入只含有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> int main(){ int a[10],i,x,y,j; for(i=0;i<9;i++){ scanf("%d",&x); a[i]=x; } scanf("%d",&y); a[9]=y; int change; change=a[9]; for(j=8;j>=0&&change<a[j];i--) a[j+1]=a[j]; a[j+1]=change; for(i=0;i<9;i++) printf("%d\n",a[i]); return 0; } 哪里出问题了呀,求解
为什么你这 123456789 0 的时候不行 感觉有问题
小龙老师 2021-06-16 17:57:43 |
程序没有考虑到输入的数值比第一个还要小,所以需要补充另外一种可能。
#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); for (i=0;i<9;i++)//前面或者中间插入 { if(x>=a[i]&&x<=a[i+1]) { t=i+1; break; } } if(i==9)//插入到末端 t=9; if(i<9) { for (i=9;i>t;i--) { a[i]=a[i-1]; } a[t]=x; } else a[9]=x; for (i=0;i<10;i++) { printf("%d\n",a[i]); } return 0; }
不知道哪里错了浏览:1226 |
汽水瓶 (C语言代码)浏览:764 |
高精度加法 (C++代码)(大数加法)浏览:1008 |
C语言程序设计教程(第三版)课后习题5.7 (C++代码)浏览:879 |
C语言训练-素数问题 (C语言代码)浏览:1695 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:543 |
【亲和数】 (C语言代码)浏览:530 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:793 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:723 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:565 |
诺坎普北看台 2021-07-13 15:03:57 |
#include<stdio.h> int main(){ int a[10],i,x,y,j; for(i=0;i<9;i++){ scanf("%d",&x); a[i]=x; } scanf("%d",&y); a[9]=y; int change; change=a[9]; for(j=8;j>=0&&change<a[j];j--) a[j+1]=a[j]; a[j+1]=change; for(i=0;i<10;i++) printf("%d ",a[i]); return 0; }解决啦,供参考