1. 程式人生 > >C語言訓練-1244-數列有序

C語言訓練-1244-數列有序

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