第一周面试题

1.有一个整形数组:int arr[](数组的值由外部输入决定),一个整型变量:x(也由外部输入决定)。

要求:
1)删除数组中与x的值相等的元素

2)不得创建新的数组
3)最多只允许使用单层循环
4)无需考虑超出新数组长度后面的元素,所以,请返回新数组的长度

例如:{1,2,3,5,7,3,5,9)x=3
原数组的有效部分变为:{1,2,5,7,5,9}

 方法一:

#include

int main(int argc, const char *argv[])
{
	int x;
	printf("请输入x:");
	scanf("%d",&x);
	int n;
	printf("请输入n:");
	scanf("%d",&n);
	int arr[n];
	for(int i=0;i

 方法二:

int removeElement(int arr[], int n, int x)
{
    int j = 0;
    for (int i = 0; i < n; i++)
    {
        if (arr[i] != x)
        {
            arr[j] = arr[i];
            j++;
        }
    }
    return j;
}

 方法三:

#include

int main(int argc, const char *argv[])
{
	int arr[]={1,2,3,4,3,5,3,6};
	int k = 0;
	int j = 0;
	int len = sizeof(arr)/sizeof(arr[0]);
	/*
	for(i=0;i

 

 

2.写递归函数 DigitSum(n),输入一个非负整数,返回组成它的数字之和例如:调用DigitSum(1729),则返回1+7+2+9,它的和是19;输入1729,输出19

#include
int add_size(int num)
{
	if(num==0)
	{
		return 0;
	}
	return num%10 + add_size(num/10);
}


int main(int argc, const char *argv[])
{
	int num;
	scanf("%d",&num);
	int num_add = add_size(num);

	printf("%d\n",num_add);

	return 0;
}

3.写一个宏,可以将一个int型整数的二进制位的奇数位和偶数位交换
 

#include

#define exchange(num) ({\
		((num&0xaaaaaaaa)>>1) + ((num&0x55555555)<<1);\
		})

int main(int argc, const char *argv[])
{
	int num;
	printf("请输入num:");

	scanf("%d",&num);

	int num_t=exchange(num);

	printf("转换后的数为:%d\n",num_t);
	return 0;
}

 4.字符串倒置:(注意:是倒置,而不是直接倒置输出)

原字符串为:char *str =“I am Chinese”
倒置后为:“Chinese am I”.
附加要求:删除原本字符串中多余的空格

#include

void swap(char* str, int front, int rear)
{
	while(front < rear)
	{
		*(str+front) ^= *(str+rear);
		*(str+rear) ^= *(str+front);
		*(str+front) ^= *(str+rear);
		front++;
		rear--;
	}
}


int main(int argc, const char *argv[])
{
	char str[100]="l      love       you";
	int front = 0;
	int rear = 0;
	//去空格
	int i = 0;
	int j = 0;
	int len = strlen(str);
	for(i=0;i < len;i++)
	{
		if(str[i] == ' ' && str[i+1] == ' ')
			continue;
		str[j++] = str[i];
	}
	str[j] = '\0';
	
	printf("转换为%s\n",str);

	rear = strlen(str)-1;
	//整个转化
	swap(str,front,rear);
	printf("转换为%s\n",str);

	i = 0;
	j = 0;
	while(str[i] != '\0')
	{
		//找头
		while(str[i] == ' ')
		{
			i++;
		}
		j = i;
		//找尾
		while(str[j] != ' ' && str[j] != '\0')
		{
			j++;
		}
		swap(str,i,j-1);
		i = j;
	}

	printf("转换为%s\n",str);
	return 0;
}

你可能感兴趣的:(面试)