C語言訓練-1244-數列有序
阿新 • • 發佈:2018-11-11
Problem Description
有n(n<=100)個整數,已經按照從小到大順序排列好,現在另外給一個整數m,請將該數插入到序列中,並使新的序列仍然有序。
Input
輸入資料包含多個測試例項,每組資料由兩行組成,第一行是n和m,第二行是已經有序的n個數的數列。n和m同時為0表示輸入資料的結束,本行不做處理。
Output
對於每個測試例項,輸出插入新的元素後的數列。
Sample Input
3 3
1 2 4
0 0
Sample Output
1 2 3 4
#include<bits/stdc++.h> int main() { int n,m,i,t,j,k; while(scanf("%d %d",&n,&m),n != 0||m != 0) //當輸入n不等於0或者m不等於0的時候繼續獲取n和m的值,直到獲取到n和m同時為0的值 { int a[101]; for(i=0; i<n; i++) { scanf("%d",&a[i]); //依次獲取n個數字並將他們依次存放在數組裡 } a[n] = m; //將需要插入的值M賦值給陣列的下標N的那個位置 for(j = n-1;j >= 0; j--) //從陣列最後開始遍歷後面的一個數和前一個數進行比較,後面的數小於前面得數則進行交換 { if(a[j]>a[j+1]) //三元組交換法(好像是這麼叫的) {k = a[j]; a[j] = a[j+1]; a[j+1] = k; }else break; } for(i = 0; i <= n ; i++){ //控制輸出字元間的空格,如果是最後一個就不在輸出字元後輸出空格,否則輸出 if(i==n){ printf("%d",a[i]);} else printf("%d ",a[i]); } printf("\n"); } return 0; }
剛開始學習,太多不明白的地方,這題也是借鑑了大佬的思路然後跟著大佬做的,可能有不完善的地方。
大佬原題連結:
https://blog.csdn.net/better_space/article/details/52196372