C语言刷题训练DAY.13

1.有序序列判断C语言刷题训练DAY.13_第1张图片

 

解题思路:

这里我们先看代码,我们定义了一个flag1和flag2,它的作用主要就是判断是不是升序,具体怎么使用的,我为大家画图展示。

C语言刷题训练DAY.13_第2张图片

 

解题代码:

#include
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[50] = { 0 };
	int flag1 = 0;
	int flag2 = 0;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
		if (i > 0)
		{
			if (arr[i] > arr[i - 1])
				flag1 = 1;
			else
				flag2 = 1;
		}
	}
	if (flag1+flag2 == 1)
		printf("sorted\n");
	else
		printf("unsorted\n");
	return 0;
}


2.序列中删除指定数字C语言刷题训练DAY.13_第3张图片

 解题思路:

我们只需要在数组中不打印要删除的数字即可。

解题代码:

#include
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[50] = { 0 };
	int c = 0;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//输入要找的数字
	scanf("%d", &c);

	for (i = 0; i < n; i++)
	{
		//如果当前下标的数子不等于要删除的数字,我们就打印它
		if (arr[i] != c)
		{
			printf("%d ", arr[i]);
		}
					
	}

	return 0;
}

方法2:

这种方法和上面的思想差不多。

#include
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[50] = { 0 };
	int c = 0;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//输入要找的数字
	scanf("%d", &c);
	int j = 0;
	for (i = 0; i < n; i++)
	{
		if (arr[i] != c)
		{
			arr[j++] = arr[i];
		}
	}
	for (i = 0; i < j; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}



3.序列中整数去重C语言刷题训练DAY.13_第4张图片

 解题思路:

假设我们现在有五个数字:

10 12 93 12 75

我们想去重的话,首先要拿第一个数字和后面所有的数子比较,再用第二个数字和后面的所有数字比较,如果有相同的,我们就把后面的数字把那个数字覆盖掉。

这里我直接画图为大家展示。

C语言刷题训练DAY.13_第5张图片

另外还有一种情况,如果有多个相同的数字的话,需要特殊处理。

解题代码:

#include
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[10000] = { 0 };
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//去重
	for (i = 0; i < n; i++)
	{
		//j是i后面的元素,让他们比较是否相等
		int j = 0;
		//j的初始位置在i的后面
		for (j = i+1; j < n; j++)
		{
			//如果两个元素相等,进入循环处理
			if (arr[i] = arr[j])
			{
				//覆盖
				int k = 0;
				for (k = j; k < n-1; k++)
				{
					arr[k] = arr[k + 1];
				}
				//删掉一个,少了一个元素
				n--;
				j--;
			}
		}
	}
	for (i = 0; i < n; i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}


4.有序序列合并C语言刷题训练DAY.13_第6张图片

 解题思路:

我们先把输入的数据存放到同一个数组,再使用冒泡排序即可。

解题代码:

#include
int main()
{
	int n = 0;
	int m = 0;
	int arr[2000] = { 0 };
	scanf("%d %d", &n, &m);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = n; i < n+m; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < n + m -1; i++)
	{
		int j = 0;
		for (j = 0; j < n + m - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
	for (i = 0; i < n + m; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
} 


5.班级成绩输入输出

C语言刷题训练DAY.13_第7张图片

 解题思路:

这里非常简单,只需要控制好循环输入即可。

解题代码:

#include
int main()
{
	int i = 0;
	double arr[5] = { 0 };
	for(i=0;i<5;i++)
	{ 
		int j = 0;
		double sum = 0;
		for (j = 0; j < 5; j++)
		{
			scanf("%lf", &arr[j]);
			sum += arr[j];
		}
		for (j = 0; j < 5; j++)
		{
			printf("%.1lf ", arr[j]);
		}
		printf("%.1lf\n", sum);
	}

	return 0;
}


6.矩阵元素定位C语言刷题训练DAY.13_第8张图片

 

解题思路:

这里我们要知道,二维数组的存储是如下图,kiki想看到的是第一行第二个的数字,也就是2,但是如果从二维数组里面拿出第一行第二个的数字的话,就是6,所以我们应当给行和列-1。

C语言刷题训练DAY.13_第9张图片

 

解题代码:

#include
int main()
{
	int n = 0;
	int m = 0;
	scanf("%d %d", &n, &m);
	int i = 0;
	int arr[25][25] = { 0 };
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = 0; j < m; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	int R = 0;
	int T = 0;
	scanf("%d %d", &R,&T);
	printf("%d", arr[R-1][T-1]);

	return 0;
}

你可能感兴趣的:(c语⾔刷题训练—初级,c语言,算法)