1、右下角
1 #include <stdio.h> 2 #include <malloc.h> 3 int main() 4 { 5 int n; 6 scanf("%d",&n); 7 8 int *arr = (int*)malloc(sizeof(int)*n*n); //一维模拟二维数组 9 10 for(int a=0; a<n*n; ++a) 11 { 12 scanf("%d",&arr[a]); 13 } 14 15 for(int i=0; i<n; ++i) 16 { 17 for(int j=0; j<n-i-1; ++j)//左上角输出空格 18 { 19 printf(" "); 20 } 21 for(int k=n-i-1; k<n; ++k)//右下角输出数组元素 22 { 23 printf("%d ",arr[i*n+k]);//模拟 24 } 25 printf("\n"); 26 } 27 28 return 0; 29 }
2、插入排序
1 #include <stdio.h> 2 #include <malloc.h> 3 4 void InsertSort(int *arr, int m) 5 { 6 int i; 7 for(i=1; i<m; ++i){/*第0个元素有序,从第1个元素向右无序*/ 8 int j=i-1,key=arr[i];/*保存第i个元素,左边的元素i-1*/ 9 while(j>=0 && key>arr[j]){/*保存的元素key与之前的元素从右向左逐个比较*/ 10 arr[j+1]=arr[j];/*移动(向后赋值)*/ 11 j--; 12 } 13 arr[j+1]=key;/*j--退出,恢复正确值j+1*/ 14 } 15 } 16 17 int main() 18 { 19 int n; 20 scanf("%d",&n); 21 22 int *arr = (int*)malloc(sizeof(int)*n); 23 24 for(int i=0; i<n; ++i) 25 { 26 scanf("%d",&arr[i]); 27 } 28 29 int s,m; 30 scanf("%d%d",&s,&m); 31 32 InsertSort(&arr[s],m); 33 34 for(int j=0; j<n; ++j) 35 { 36 printf("%d ",arr[j]); 37 } 38 39 return 0; 40 }
3、边缘与内心的差
1 #include <stdio.h> 2 #include <malloc.h> 3 int main() 4 { 5 int n,m,s1=0,s2=0; 6 scanf("%d%d",&n,&m); 7 8 int *arr = (int*)malloc(sizeof(int)*n*m); //一维模拟二维数组 9 10 for(int i=0; i<n*m; ++i) 11 { 12 scanf("%d",&arr[i]); 13 } 14 15 for(int i=0; i<n; ++i) 16 { 17 for(int j=0; j<m; ++j) 18 { 19 if(i==0||i==n-1 || (i!=0&&i!=n-1&&(j==0||j==m-1))) 20 { 21 s1 += arr[i*m+j]; //一行m个 22 } 23 else 24 { 25 s2 += arr[i*m+j]; 26 } 27 } 28 } 29 30 printf("%d ",s1-s2); 31 32 return 0; 33 }
4、左下角
1 #include <stdio.h> 2 #include <malloc.h> 3 int main() 4 { 5 int n; 6 scanf("%d",&n); 7 8 int *arr = (int*)malloc(sizeof(int)*n*n); //一维模拟二维数组 9 10 for(int a=0; a<n*n; ++a) 11 { 12 scanf("%d",&arr[a]); 13 } 14 15 for(int i=0; i<n; ++i) 16 { 17 for(int j=0; j<i+1; ++j)//输出数组元素 18 { 19 printf("%d ",arr[i*n+j]);//模拟 20 } 21 printf("\n"); 22 } 23 return 0; 24 }
5、快速排序
1 #include <stdio.h> 2 #include <malloc.h> 3 4 void QuickSort(int *a, int left, int right) 5 { 6 int i,j,t; 7 /*左指针left指向数组头 右指针right指向数组尾*/ 8 if(left<right){ 9 i=left,j=right,t=a[left];/*左右指针 提取基数*/ 10 while(i<j){ 11 while(i<j && a[j]<=t) j--;/*右指针左移 指向小于基数的数据停止*/ 12 a[i]=a[j]; /*补空位*/ 13 while(i<j && a[i]>=t) i++;/*左指针右移 指向大于基数的数据停止*/ 14 a[j]=a[i]; /*补空位*/ 15 } 16 a[j]=t;/*右指针指向数据即基数应在的位置 基数定位*/ 17 QuickSort(a,left,j-1);/*左边数据递归*/ 18 QuickSort(a,j+1,right);/*右边数据递归*/ 19 } 20 } 21 22 int main() 23 { 24 int n; 25 scanf("%d",&n); 26 27 int *arr = (int*)malloc(sizeof(int)*n); 28 29 for(int i=0; i<n; ++i) 30 { 31 scanf("%d",&arr[i]); 32 } 33 34 int s,m; 35 scanf("%d%d",&s,&m); 36 37 QuickSort(arr,s,m); //左s,右m 38 39 for(int j=0; j<n; ++j) 40 { 41 printf("%d ",arr[j]); 42 } 43 44 return 0; 45 }
6、二分查找
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 100 4 int BinarySearch ( int *arr, int n, int m); 5 int main() 6 { 7 int n; 8 scanf("%d",&n); 9 int arr[N] = {0}; 10 for(int i=0; i<n; ++i){ 11 scanf("%d",&arr[i]); 12 } 13 int m; 14 scanf("%d",&m); 15 int ret = BinarySearch(arr,n,m); 16 if(ret!=-1) 17 printf("%d",ret); 18 else 19 printf("null"); 20 return 0; 21 } 22 int BinarySearch ( int *arr, int n, int m) 23 { 24 int left = 0, right = n-1, mid; 25 26 while ( left <= right ) 27 { 28 mid = (left+right)/2; /*计算中间元素坐标*/ 29 if( m <arr[mid]) right = mid-1; /*调整右边界*/ 30 else if( m>arr[mid]) left = mid+1; /*调整左边界*/ 31 else return mid; /*查找成功,返回数据元素的下标*/ 32 } 33 return -1; /*查找不成功,返回-1*/ 34 }
7、一维数组加法
1 #include<stdio.h> 2 /*不考虑进位可以过OJ*/ 3 int main() 4 { 5 int A[100], B[100], C[100]; 6 int i, n; 7 scanf("%d", &n); 8 for(i=0;i<n;i++) 9 { 10 scanf("%d", &A[i]); 11 } 12 for(i=0;i<n;i++) 13 { 14 scanf("%d", &B[i]); 15 } 16 for(i=0;i<n;i++) 17 { 18 C[i]=A[i]+B[i]; 19 printf("%d ", C[i]); 20 } 21 printf("\n"); 22 return 0; 23 }
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 100 4 5 int main() 6 { 7 int n; 8 scanf("%d",&n); 9 int a[N] = {0}, b[N] = {0}, c[N] = {0}; 10 /* 两个数组赋值 */ 11 for(int i=0; i<n; ++i){/*数字的最高位在数组的0下标*/ 12 scanf("%d",&a[i]); 13 } 14 for(int j=0; j<n; ++j){ 15 scanf("%d",&b[j]); 16 } 17 /* 两个数组相加到数组c */ 18 int carry = 0, index = 0; 19 for(int j=n-1; j>=0; j--)/*从数字的最低位相加*/ 20 { 21 int temp = a[j] + b[j] + carry; 22 c[index++] = temp%10; 23 carry = temp/10;/**< 进位 */ 24 } 25 if(carry > 0)/*判断是否进位*/ 26 { 27 c[index++] = carry; 28 } 29 /* 打印相加结果 */ 30 for(int k=index-1; k>=0; --k) 31 { 32 printf("%d ",c[k]); 33 } 34 return 0; 35 }
8、平均值函数
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 100 4 double avg(int a[],int s, int e); 5 int main() 6 { 7 int n; 8 scanf("%d",&n); 9 int a[N] = {0}; 10 for(int i=0; i<n; ++i){ 11 scanf("%d",&a[i]); 12 } 13 int s,e; 14 scanf("%d%d",&s,&e); 15 printf("%f",avg(a,s,e)); 16 17 return 0; 18 } 19 double avg(int a[],int s, int e) 20 { 21 double sum = 0; 22 for(int i=s; i<=e; ++i){ 23 sum += a[i]; 24 } 25 return sum/(e-s+1); 26 }
9、一维数组赋值
1 #include<stdio.h> 2 #include <string.h> 3 #define N 100 4 int main() 5 { 6 int n; 7 int arr[N] = {0}; 8 scanf("%d",&n); 9 /* 偷懒 直接输出了 */ 10 for(int i=0; i<n; ++i){ 11 scanf("%d",&arr[i]); 12 if(i%2) 13 printf("%d ",arr[i]); 14 } 15 return 0; 16 }
10、选择排序
1 #include<stdio.h> 2 #include <string.h> 3 #define N 100 4 5 void SelectionSort(int a[], int s, int m); 6 int main() 7 { 8 int n; 9 int arr[N] = {0}; 10 scanf("%d",&n); 11 12 for(int i=0; i<n; ++i){ 13 scanf("%d",&arr[i]); 14 } 15 16 int s,m; 17 scanf("%d%d",&s,&m); 18 19 SelectionSort(arr,s,m); 20 for(int i=0; i<n; ++i){ 21 printf("%d ",arr[i]); 22 } 23 24 return 0; 25 } 26 void SelectionSort(int a[], int s, int m) 27 { 28 for(int i = s; i<m; ++i){ 29 int max = a[i];/*降序*/ 30 int index = i; 31 for(int j = i+1; j<=m; ++j){/*从i+1逐个比较*/ 32 if(max<a[j]){ /*是否比后面的小*/ 33 max = a[j]; 34 index = j; 35 } 36 } 37 if(index != i){/*找到了最大值才交换*/ 38 a[index] = a[i]; 39 a[i] = max; 40 } 41 } 42 }