《剑指offer》在mac上编译通过的代码

电脑:MAC 64位

编译工具:xcode

2.3.1数组

#include <stdio.h>

int GetSize(int data[])
{
    return sizeof(data);
}

int main(int argc, const char * argv[]){
    int data1[] = {1,2,3,4,5};
    int size1 = sizeof(data1);
    
    int *data2 = data1;
    int size2 = sizeof(data2);
    
    int size3 = GetSize(data1);
    
    printf("%d,%d,%d\n",size1,size2,size3);
    
    return 0;
}

输出结果:

20,8,8

面试题3:二维数组中的查找

1)从右上角开始找:说明

xcode中无bool,需要重新定义

#include <stdio.h>
typedef enum{
    false,
    true
}bool;

bool Find(int *matrix, int rows, int columns, int number ){
    bool found = false;
    if(matrix != NULL && rows > 0 && columns > 0){
        int row = 0 ;
        int column = columns - 1 ;
        while(row<rows && column>=0){
            if(matrix[row*4+column] == number){
                printf ("The number is %d,row = %d,column = %d\n",matrix[row*4+column],row+1,column+1);
                found = true;
                break;
            }else if(matrix[row*4+column] > number){
                --column;
            }else{
                ++row;
            }
        }
    }
    if(found == false){
        printf("matrix have no number %d\n",number);
    }
    return found;
}

void main() {
    int matrix[][4] = {1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
    bool flag = Find((int *)matrix, 4, 4, 15);
    
}

结果

The number is 15,row = 4,column = 4
matrix have no number 100
Program ended with exit code: 0
2)从左下角开始找,可以找到全部重复的数字/找出最大最小值/查找没有的数字

#include <stdio.h>
typedef enum{
    false,
    true
}bool;
bool Find(int *matrix, int rows, int columns, int number ){
    bool found = false;
    if(matrix != NULL && rows > 0 && columns > 0)
    {
        int column = 0 ;
        int row = rows - 1 ;
        
        while(matrix != NULL&& rows > 0 && columns > 0)
        {
            while(matrix != NULL && rows > 0 && columns > 0)
            {
                if(matrix[row*4+column] == number)
                {
                    printf ("The number is %d,row = %d,column = %d\n",matrix[row*4+column],row+1,column+1);
                    found = true;
                    break;
                }else if(matrix[row*4+column] < number)
                {
                    ++column;
                    if(column>3){
                        break;
                    }
                }else
                {
                    --row;
                }
            }
            --row;
            ++column;
            if(row<0 || column>3)
            {
                break;
            }
        }
    }

        if(found == false){
            printf("matrix have no number %d\n",number);
        }
    return found;
}

int main() {
    int matrix[][4] = {1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
    Find((int *)matrix, 4, 4, 9);//double
    Find((int *)matrix, 4, 4, 2);
    Find((int *)matrix, 4, 4, 15);//max
    Find((int *)matrix, 4, 4, 1);//min
   Find((int *)matrix, 4, 4, 11115);//none
    return 0;
}

结果

The number is 9,row = 2,column = 3
The number is 9,row = 1,column = 4
The number is 2,row = 2,column = 1
The number is 2,row = 1,column = 2
The number is 15,row = 4,column = 4
The number is 1,row = 1,column = 1
matrix have no number 11115

面试题4:替换空格

说明:含mac上编译通过的c代码和测试用例

#include <stdio.h>

void ReplaceBlank(char string[],int length){
    if(string == NULL & length <= 0)
    {
        return;
    }
    int originalLength = 0;
    int numberOfBlank = 0;
    int i = 0;
    while(string[i] != '\0')
    {
        ++originalLength;
        if(string[i] == ' ')
        {
            ++numberOfBlank;
        }
        i++;
    }
    int newLength = originalLength + numberOfBlank*2;
    if(newLength>length)
    {
        return;
    }
    int indexOfOriginal = originalLength;
    int indexOfNew = newLength;
    while (indexOfOriginal>=0 && indexOfNew>indexOfOriginal)
    {
        if(string[indexOfOriginal]==' ')
        {
            string[indexOfNew--] = '0';
            string[indexOfNew--] = '2';
            string[indexOfNew--] = '%';
        }
        else
        {
            string[indexOfNew--] = string[indexOfOriginal];
        }
        --indexOfOriginal;
    }
    
    
}

void main(){
    char m1[30] = "We are happy.";
    ReplaceBlank(m1,30);
    printf("%s\n",m1);
    //test2:blank in first
    char m2[30] = " We are happy.";
    ReplaceBlank(m2,30);
    printf("%s\n",m2);
    //test3:blank in last
    char m3[30] = "We are happy. ";
    ReplaceBlank(m3,30);
    printf("%s\n",m3);
    //test4:blank continue
    char m4[30] = "We  are  happy.";
    ReplaceBlank(m4,30);
    printf("%s\n",m4);
    //test5:no blank
    char m5[30] = "Wearehappy.";
    ReplaceBlank(m5,30);
    printf("%s\n",m5);
    //test6:NULL
    char m6[30];
    ReplaceBlank(m6,30);
    printf("%s\n",m6);
    //test7:NULL
    char m7[30] = "";
    ReplaceBlank(m7,30);
    printf("%s\n",m7);
    //test8:only one black
    char m8[30] = " ";
    ReplaceBlank(m8,30);
    printf("%s\n",m8);
    //test9:only 3black continue
    char m9[30] = "   ";
    ReplaceBlank(m9,30);
    printf("%s\n",m9);
}

输出结果:

We%20are%20happy.
%20We%20are%20happy.
We%20are%20happy.%20
We%20%20are%20%20happy.
Wearehappy.


%20
%20%20%20
Program ended with exit code: 10


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值