1 / 8

70011 对一个 有序的数组 , 输入一个整数 x, 把 x 插入到这组数据中 , 使该组数据仍然有序

70011 对一个 有序的数组 , 输入一个整数 x, 把 x 插入到这组数据中 , 使该组数据仍然有序. 输入 n,a,x. 例 数组 a: 1 3 5 7 9 插入 6. a[n-1]<x. i=0. a[n]=x. 解法 1. a[i]<x. 找到插入数的位置 插入数位置后的数后移 插入数. i++. j=n-1,n-2,…i. a[j+1]=a[j]. 1 3 5 7 9. j. a[i]=x. 1 3 5 7 7 9. 1 3 5 6 7 9. 输出 a. #include <stdio.h> void main()

quinn-johns
Download Presentation

70011 对一个 有序的数组 , 输入一个整数 x, 把 x 插入到这组数据中 , 使该组数据仍然有序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 70011 对一个有序的数组,输入一个整数 x,把 x 插入到这组数据中,使该组数据仍然有序 输入n,a,x 例 数组a: 1 3 5 7 9 插入 6 a[n-1]<x i=0 a[n]=x 解法1 a[i]<x 找到插入数的位置 插入数位置后的数后移 插入数 i++ j=n-1,n-2,…i a[j+1]=a[j] 1 3 5 7 9 j a[i]=x 1 3 5 7 7 9 1 3 5 6 7 9 输出a

  2. #include <stdio.h> void main() {int i,j,n,x,a[100]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&x); if(a[n-1]<x) a[n]=x; else {i=0; while(a[i]<x)i++; for(j=n-1;j>=i;j--) a[j+1]=a[j]; a[i]=x; } for(i=0;i<=n;i++) printf("%d ", a[i]); } 输入n,a,x a[n-1]<x i=0 a[n]=x a[i]<x i++ j=n-1,n-2,…i a[j+1]=a[j] j a[i]=x 输出a

  3. 解法2 1 3 5 7 9 1 3 5 6 9 1 3 5 6 7 9 找到插入数的位置 插入数与找到位置上交换 6 7 #include <stdio.h> void main() {int i,n,x,a[100],t; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&x); for(i=0;i<n;i++) if(a[i]>x) {t=a[i];a[i]=x;x=t;} a[n]=x; for(i=0;i<=n;i++) printf("%d ", a[i]); } 输入n,a,x i=0,1,…n-1 a[i]>x t=a[i] a[i]=x x=t i a[n]=x 输出a

  4. 解法3 1 3 5 7 9 6 1 3 5 7 6 9 1 3 5 6 7 9 插入数存入数组的最后 从后起两两相比交换位置 #include <stdio.h> void main() {int i,n,x,a[100],t; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&x); a[n]=x; for(i=n-1;i>=0;i--) if(a[i+1]<a[i]) {t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=0;i<=n;i++) printf("%d ", a[i]); } 输入n,a,x a[n]=x i=n-1,n-2,..0 a[i+i]>a[i] t=a[i+1] a[i+1]=a[i] a[i]=t i 输出a

  5. 1 输入a k=1;k<n;k++ i=0;i<n;i++ 0 a[row][col]>a[k][col] col=0 1 j=1;j<n;j++ row=k 0 a[i][col]<a[i][j]) k 1 0 row==i col=j 1 输出i,col j 停 row=0 i 1 输出NO 70026找矩阵的鞍点(元素值在该行上最大, 在该列上最小) 解法一: 1.固定i行,在i行找到最大元素的列j=>col 2.在col列找到最小元素的行k=>row 3.如i==row,则鞍点为row行col列 void main() {int i,j,k,row,col,flag=0,n; int a[6][6]; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) {col=0; for(j=1;j<n;j++) if(a[i][col]<a[i][j])col=j; row=0; for(k=1;k<n;k++) if(a[i][col]>a[k][col])row=k; if(row==i) {flag=1;break;} } if(flag) printf("i=%d,j=%d",row,col); else printf("NO"); }

  6. …… …… aij …… …… 解法二: 对每个元素判别是否鞍点 1.固定i行j列的元素aij 2.对i行求出列最大值max 3.对j列求出列最小值min 4.若 max==min==aij 则鞍点为i行j列 #include "stdio.h" int main(void) {int flag, i, j, k, n,row,col,max, min; int a[6][6]; scanf("%d", &n); for(i = 0; i < n; i++) for(j = 0; j < n; j++) scanf("%d", &a[i][j]); flag=0; for(i=0;i<n;i++) for(j=0;j<n;j++) {max=a[i][0]; for(k=1;k<n;k++) if(max<a[i][k]) max=a[i][k]; min=a[0][j]; for(k=1;k<n;k++) if(min>a[k][j]) min=a[k][j]; if(max==min&&max==a[i][j]) {flag=1;row=i;col=j; goto ll;} } ll: if(flag != 0) printf("a[%d][%d] = %d\n", row, col,a[row][col]); else printf("NO\n"); }

  7. maxj max 例 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9 1 1 1 3 7 8 6 0 mixi 3 2 2 0 0 6 1 1 max[2]=6 i=2 maxj[2]=1 == j min[1]=6 j=1 mini[1]=2 == i 解法三: 1.求出每行的最大值, 并记住行列 max[n-1] maxj[n-1] max对应的下标 最大值 列位置 行位置 2.求出每列的最小值, 并记住行列 min[n-1] mini[n-1] min对应的下标 最小值 行位置 列位置 3.若 max[i]==min[j] (i为行,j为列) 并 maxj[i]==j mini[j]==i 则鞍点为i行j列 min

  8. #include<stdio.h> void main() {int n,i,j; int a[6][6],max[6],maxj[6]; int min[6],mini[6]; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) {max[i]=a[i][0]; maxj[i]=0; for(j=1;j<n;j++) if(max[i]<a[i][j]) {max[i]=a[i][j];maxj[i]=j;} } for(j=0;j<n;j++) {min[j]=a[0][j]; mini[j]=0; for(i=1;i<n;i++) if(min[j]>a[i][j]) {min[j]=a[i][j];mini[j]=i;} } for(i=0;i<n;i++) for(j=0;j<n;j++) if(max[i]==min[j]&&maxj[i]==j &&mini[j]==i) {printf("%d %d\n",i,j); return; } printf("no\n"); }

More Related