平时碰到的一些编程题
把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。
大写字母置后
1 #include <stdio.h> 2 #include <string.h> 3 4 //大致思路是从最后一个字符开始判断是不是大写字母,如果是就和后面的i个小写字母冒泡交换,如果不是大写字母就令小写字母的数目i++ 5 //判断是不是大写字母 6 int isUpperAlpha(char c) 7 { 8 if(c >= 'A' && c <= 'Z') 9 { 10 return 1; 11 } 12 return 0; 13 } 14 15 //交换两个字母 16 void swap(char *a, char *b) 17 { 18 char temp = *a; 19 *a = *b; 20 *b = temp; 21 } 22 23 char * mySort(char *arr, int len) 24 { 25 if(arr == NULL || len <= 0) 26 { 27 return NULL; 28 } 29 30 int i = 0, j = 0, k = 0, m = 0; 31 for(j = len-1; j >=0; j--) 32 { 33 if(isUpperAlpha(arr[j])) 34 { 35 m=j;k=i; //i为小写字母的数目 36 while(k--) 37 { 38 swap(&arr[m++], &arr[m]); 39 } 40 } 41 else i++; 42 } 43 return arr; 44 } 45 46 int main() 47 { 48 char arr[] = "GaaaaBGaaaAbcAdeBbDAcSSs"; 49 printf("%s\n", mySort(arr, strlen(arr))); 50 return 0; 51 }
螺旋矩阵
螺旋矩阵
1 #include<iostream> 2 using namespace std; 3 void main() 4 { 5 int N,i=-1,j,n,num=1; 6 int a[10][10]={0}; 7 cout<<"输入矩阵的阶数:"<<endl; 8 cin>>N; 9 for(n=0;n<N/2;n++) 10 { 11 for(j=n;j<N-n-1;j++) a[i+1][j]=num++; 12 for(i=n;i<N-n-1;i++) a[i][j]=num++; 13 for(j=N-n-1;j>n;j--) a[i][j]=num++; 14 for(i=N-n-1;i>n;i--) a[i][j]=num++; 15 } 16 if(0==a[n][n]) a[n][n]=num++; 17 for(i=0;i<N;i++) 18 { 19 for(j=0;j<N;j++) 20 cout<<a[i][j]<<'\t'; 21 cout<<endl; 22 } 23 }