C/C++程序员面试宝典-2

9. 关系数据库的范式

10. 数据库操作中的事务

事务的4个特性:

 

11. 数字矩阵的生成:

对应的代码如下:

复制代码
#include <iostream>
#include <algorithm>
#include <iomanip>
#define print_arr2d(arr,N) {for(int i=0;i<N;i++){\
     for( int j= 0;j<N;j++)\
    cout<<setw( 3)<<arr[i][j];\
    cout<<endl;\
}}
using  namespace std;
/*
  1  2  9 10 25
  4  3  8 11 24
  5  6  7 12 23
 16 15 14 13 22
 17 18 19 20 21 
 
*/
void mat_1(){
     const  int N= 5;
     int arr[N][N];
     int m= 1;
     for( int i= 0;i<N;i++){
         if(i& 0x1){
             for( int j= 0;j<=i;j++)
                arr[j][i]=m++;
             for( int j=i- 1;j>= 0;j--)
                arr[i][j]=m++;
        }
         else{
             for( int j= 0;j<=i;j++)
                arr[i][j]=m++;
             for( int j=i- 1;j>= 0;j--)
                arr[j][i]=m++;
        }
    }
    print_arr2d(arr,N);
}
/*
  1  2  6  7 15
  3  5  8 14 16
  4  9 13 17 22
 10 12 18 21 23
 11 19 20 24 25
*/
void mat_2(){
     const  int N= 5;
     int a[N][N];
     int m= 1;
     int K= 0;
     for( int i= 0;i<N;i++,K++){
         for( int j= 0;j<=i;j++)
             if(K% 2== 0)
                a[K-j][j]=m++;
             else
                a[j][K-j]=m++;
    }
     for( int i= 1;i<N;i++,K++){
         for( int j=i;j<N;j++)
             if(K% 2== 0)
                a[K-j][j]=m++;
             else
                a[j][K-j]=m++;
    }
    print_arr2d(a,N);
}
/*
  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9
 
*/
void mat_3(){
     const  int N= 6;
     int a[N][N]={ 0};
     int m= 1;
     int K=N/ 2;
     if(N% 2!= 0)
        a[K][K]=N*N;
     for( int i= 0;i<K;i++) {
         for( int j=i;j<=N- 1-i;j++)
            a[i][j]=m++;
    print_arr2d(a,N);
    cout<< " ================= "<<endl;
         for( int j=i+ 1;j<=N- 1-i;j++)
            a[j][N- 1-i]=m++;
    print_arr2d(a,N);
    cout<< " ================= "<<endl;
         for( int j=N- 2-i;j>=i;j--)
            a[N- 1-i][j]=m++;
    print_arr2d(a,N);
    cout<< " ================= "<<endl;
         for( int j=N- 2-i;j>=i+ 1;j--)
            a[j][i]=m++;
    print_arr2d(a,N);
    cout<< " ================= "<<endl;
    }
    print_arr2d(a,N);
}
/*
 13 12 11 10 25
 14  3  2  9 24
 15  4  1  8 23
 16  5  6  7 22
 17 18 19 20 21
 
*/
void mat_4(){
     const  int N= 6;
     int a[N][N]={ 0};
     int m=N*N;
     int K=N/ 2;
     if(N% 2!= 0)
        a[K][K]= 1;
     for( int i= 0;i<K;i++){
         for( int j=i;j<=N- 1-i;j++)
            a[j][N- 1-i]=m--;
         for( int j=N- 2-i;j>=i;j--)
            a[N- 1-i][j]=m--;
         for( int j=N- 2-i;j>=i;j--)
            a[j][i]=m--;
         for( int j=i+ 1;j<=N- 2-i;j++)
            a[i][j]=m--;
    }
    print_arr2d(a,N);
}
int main(){
    mat_4();
}
复制代码

 

 

12. 大数乘法问题:

复制代码
#include < string>
#include <iostream>
using  namespace std;
string big_multi( const  string& x,
         const  string& y){
     int szx=x.size();
     int szy=y.size();
     int *C= new  int[szx+szy+ 1]();
     for( int i=szx- 1,k= 0;i>= 0;i--,k++){
         int carry= 0;
         int m=k;
         for( int j=szy- 1;j>= 0;j--,m++){
             int val=(x[i]- ' 0 ')*(y[j]- ' 0 ')+carry+C[m];
            C[m]=val% 10;
            carry=val/ 10;
        }
         if(carry!= 0)
            C[m]=carry;
    }
     string z;
     int i=szx+szy;
     while(C[i]== 0)
        i--;
     for(;i>= 0;i--)
        z+=( char)(C[i]+ ' 0 ');
    delete C;
     return z;
}
int main(){
     int a= 78,b= 42;
     string x= " 78 ",y= " 42 ";
     string z=big_multi(x,y);
    cout<<z<< "    "<<a*b<<endl;

}
复制代码

 

13. 递归的方法将两个有序链表进行合并

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值