c语言数组训练之多字符从两端向中间汇聚+找出数组中的“单身狗”(只出现过一次的字符)

一.多字符从两端向中间汇聚

首先,我们要把他们向中间汇聚的过程显现出来,就是每个字符汇聚时打印一次。这里我们可以设两个数组,在第一个数组里面是我们最后要打印的数组,第二个数组可以初始化全部为一些符号比如“**********”这类。然后不断替换。将第一个数组的内容从两端一个个的替换。所以,代码就出来了。

然后,为了更好的观察过程,我们这里会用到一库函数Sleep(),里面是以毫秒为单位,这样的话,可以让编译过程在每一次替换后停一段时间。其对应的头文件是windows.h。

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
int main()
{
	char a1[] = "love Jackson Yee";
	char a2[] = "****************";
	int left = 0, right = strlen(a1)-1;//也可以用sizeof,只不过要减2
	while (left <= right)
	{
		a2[left] = a1[left];
		a2[right] = a1[right];
		printf("%s\n", a2);
		Sleep(1000);
		left++;
		right--;
	}
	return 0;
}

 

这最基本的代码就出来了,但是为了结果更加简洁,我们可以每一次向中间汇聚的过程结束后,清除面板,打印出最终结果。如下:

 

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
int main()
{
	char a1[] = "love Jackson Yee";
	char a2[] = "****************";
	int left = 0, right = strlen(a1) - 1;//也可以用sizeof,只不过要减2
	while (left <= right)
	{
		a2[left] = a1[left];
		a2[right] = a1[right];
		printf("%s\n", a2);
		Sleep(1000);
		system("cls");//清除屏幕上的信息
		left++;
		right--;
	}
	printf("%s\n", a2);
	return 0;
}

 

这里,我们用到了system库函数其头文件是stdlib.h,其中cls的作用是清除屏幕。

二.找出数组中只出现过一次的字符“单身狗”

首先,假设有这么一个数组,里面是{1,1,2,2,3,3,4,4,5}若将这几个数按位亦或会怎么样呢?

我们可以知道“相同为0,相异为1”,若成双成对的按位异或最终会得到0,但是再与单身狗按位异或会得到单身狗自己,所以我们这里可以暴力求解,直接用按位异或求出“单身狗”。代码如下:

#include 
int main()
{
	int arr[] = { 1,2,3,4,7,1,3,4,2 };
	int ret = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		ret ^= arr[i];
	}
	printf("单身狗是:%d\n", ret);
	return 0;
}

 

当然,这里我们也可以用计数器的方法,计算出现了几次,只出现一次是单身狗。这个方法要用到两个循环。

#include 
int main()
{
	int i = 0;
	int arr[] = { 1,2,3,4,7,1,3,4,2 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		int j = 0;
		int count = 0;
		for (j = 0; j < sz; j++)
		{
			if (arr[i] == arr[j])
			{
				count++;
			}
		}
		if (count == 1)
		{
			printf("单身狗是:%d\n", arr[i]);
			break;//只有一个单身狗,找到就跳出循环
		}
	}
	return 0;
}

这个练习有这两种实现代码。

依祝:“码”思泉涌,下“指”如有神。

你可能感兴趣的:(c语言,算法,开发语言,学习方法)