解题思路:这是常规思路,类似按身高排队一样,已经排好的队,你想插进去,找到比你矮的和比你高的前后两个人,之后的人往后退一步就行了。
首先是输入只含有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 人评分
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; }
我自己做的倒序,乱序都能用 #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; }
xiaoLIU 2023-09-08 21:31:02 |
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; }
xiaoLIU 2023-09-08 21:31:23 |
为啥不对
为啥我的错了 #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; }
#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呢?
菜鸟学编程 2023-05-17 21:21:38 |
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 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; }
思路很乱但终于整出来了 #include<stdio.h> int main() { int arr[9]; int i = 0; int x = 0; while (i < 9) { scanf("%d", &arr[i]); i++; } arr[9] = arr[8]; scanf("%d", &x); for (i=1;i<9;i++) { if (x < arr[i]&&x>arr[i-1]) { int h = 8; while (h > i) { arr[h] = arr[h - 1]; h--; } arr[i] = x; } } for (i = 0; i < 10; i++) { printf("%d\n", arr[i]); } return 0; }
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:701 |
C语言训练-求具有abcd=(ab+cd)2性质的四位数 (C语言代码)浏览:619 |
【数组的距离】 (C语言代码)浏览:787 |
字符串的输入输出处理 (C语言代码)浏览:1019 |
WU-蓝桥杯算法提高VIP-勾股数 (C++代码)浏览:1685 |
简单的for循环浏览:1497 |
本人酷爱递归实现很多问题,这里也是浏览:632 |
printf基础练习2 (C语言代码)浏览:690 |
DNA (C语言描述,蓝桥杯)浏览:1653 |
程序员的表白 (C语言代码)浏览:678 |