for(i=0;i<5;i++) if(a[i]==3) index=i;//因而記下3所在數組的下標,則a[index]就是所要找的數了
int i; 從左到右查找第一個比6大的數,記下它的下標index; for(i=9;i>index;i--) { a[i]=a[i-1]; } a[index]=x;
作法:利用for循環從後面往前面賦值,最後在a[index]的位置賦予x的值,實現數組數據的插入。數組
for(i=0;i<5;i++) if(a[i]==3)//找出3所在數組的下標 index=i;//記下下標 for(i=index;i<4;i++) { a[i]=a[i+1]; }//使a[index]賦值爲下一位,而後執行循環使下一位賦值爲下下一位;從而刪除3這個數據,保留其餘數據的數字的順序 for(i=0;i<4;i++) printf("%d"a[i]); //在使用數組的時候,因爲刪除了一位數字,因此從新輸出或者使用的時候,記得減小數組的一個長度,因此有i<4而不是i<5
二、僞代碼(利用另外一個數組):函數
int i=0;j=0; for(i=0;i<5;i++) if(a[i]==3)//找出3所在數組的下標 index=i;//記下下標 while(j!=5)//這裏若是數組長度爲n,則將5改成n便可 { if(i!=index)b[i++]=a[j++]; else {j++} }
這樣子就獲得了刪除3這個數字後剩餘數字不變的數字b了,這種方法能夠保留a這個數組,獲得新的數組,不過比第一種方法麻煩一點,有時候會顯得不必。學習
for(i=1;i<n;i++)//外循環n-1次 { for(j=0;j<n-1-i;j++) { 判斷a[j]>a[j+1],是的話交換a[j]與a[j+1]; }//內循環結束後,將有一個最大值「沉」到未排序的最下面 }
兩層循環後便可獲得有序的重構數組a[];
二、選擇法(先選擇最大的,而後按照順序排下來):
這裏也是要用到兩層循環測試
for(i=1;i<n;i++) { for(j=0;j<n-i;j++) { 若是a[MaxIndex]<a[j];則交換Max與j; //歷遍數組,找出最大的值所在下標 } 交換a[MaxIndex]與a[n-i]; //將最大的元素與(未排序)下標最大的數組元素交換 }
兩層循環後便可獲得有序的重構數組a[];調試
數組作枚舉用法:code
哈希數組用法:blog
這兩週的代碼量:884行排序
for(k=0;k<5;k++)//控制螺旋賦值的次數 { i = 0, j = 0;//從新賦值行、列 for(j = 0+k; j < n-k; j++)//控制賦值的數量 { 從左到右賦值方陣第一行; } for(i = 1+k; i <n-k; i++)//控制賦值的數量 { 從上到下賦值最後一列; } for(j = n - 2-k; j >= 0+k; j--)//控制賦值的數量 { 從右到左賦值最後一行; } for(i = n - 2-k; i >= 1+k; i--)//控制賦值的數量 { 從下到上賦值第一列; } } 利用循環,輸出二維數組a[i][j]
輸入數據 | 輸出數據 | 說明 |
---|---|---|
2 | ![]() |
恰好圍成一圈 |
4 | ![]() |
普通的一個數據 |
9 | ![]() |
臨界最大的數據 |
這道題遇到了2個問題,均在VS上調試完成
本題採用了一個for裏面4個for螺旋式地給2個行2個列賦值的方法字符串