编程之路,从0开始:练习篇

        Hello大家好,很高兴又见面了!给生活添点passion,开始今天的编程之路。

        通过前几章的学习,我们已经掌握了做一些简单题目的能力,下面就由我带大家进练习一些常见题型吧!

1、排序问题

        输入n个数字,将这十个数字按升序排序

        输入要求:无

        输出要求:无

        其实实现这种题目的方法有很多种:

(1)冒泡排序

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int n = 0;
	int arr[100] = { 0 };
	do
	{
		scanf_s("%d", &arr[i]);
		i++;
	} 
	while (getchar() != '\n');//当输入回车是跳出循环
	
	for (n = 0;n < i-1;n++)//共i个数,一共排序i-1趟
	{
		for (j = 0;j < i- n - 1;j++)
		{
			if (arr[j] > arr[j + 1])//相邻元素交换
			{
				int temp=0;
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	for (n = 0;n <i;n++)
	{
		printf("%2d", arr[n]);
	}
	return 0;
}

(2)选择排序

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int n = 0;
	int k = 0;
	int arr[100] = { 0 };
	do
	{
		scanf_s("%d", &arr[i]);
		i++;
	} 
	while (getchar() != '\n');//当输入回车是跳出循环
	
	for (n = 0;n < i-1;n++)//共i个数,一共排序i-1趟
	{
		k = n;
		for (j = n;j < i;j++)
		{
			if (arr[j] < arr[k])
			{
				k = j;
			}

		}
		int temp = 0;
		temp = arr[n];
		arr[n] = arr[k];
		arr[k] = temp;
	}
	for (n = 0;n <i;n++)
	{
		printf("%2d", arr[n]);
	}
	return 0;
}

(3)插入排序

void test(int arr[], int size)    
{    
    int i, j, tmp;    
    for (i = 1; i < size; i++) {    
        if (arr[i] < arr[i-1]) {    
            tmp = arr[i];    
            for (j = i - 1; j >= 0 && arr[j] > tmp; j--) {  
                arr[j+1] = arr[j];    
            }  
            arr[j+1] = tmp;    
        }          
    }    
}    

这里暂且简单介绍三种。

2、二分查找

        二分查找就类似于我们的猜数字小游戏,每次猜数字都猜范围中间的,这样能最快找到该数字。我们这里用一个简单的小题引入。

查找数字5的下标:
 

#include<stdio.h>

int main()
{
	int arr[10] = { 3,6,9,8,2,4,5,1,7,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);//计算数组有多少元素
	int max = sz - 1;//最大元素下标。
	int min = 0;
	
	int i = 0;
	for (i = 0;i < 4;i++)
	{
		int mid = (min + max) / 2;
		if (arr[mid] > 5)
		{
			max = mid;
		}
		else if (arr[mid] < 5)
		{
			min = mid;
		}
		else
		{
			printf("数字5下标为%d", min);
			break;
		}
	}

	

	return 0;
}

输出结果为4。

3、计算阶乘

        要求:输入一个数字,并计算出他的阶乘

(1)循环法

#include<stdio.h>

int main()
{
	int n = 0;
	int i = 0;
	int ret = 1;
	printf("请输入数字:");
	scanf_s("%d", &n);
	for (i = 1;i <= n;i++)
	{
		ret = i * ret;
	}
	printf("%d的阶乘为%d", n, ret);
	return 0;
}

(2)递归法

#include<stdio.h>
int test(int n)
{
	if (n == 1)
	{
		return 1;
	}
	else
	return n * test(n - 1);
}
int main()
{
	int n = 0;
	int i = 0;
	int ret = 1;
	printf("请输入数字:");
	scanf_s("%d", &n);
	ret = test(n);
	printf("%d的阶乘为%d", n, ret);
	return 0;
}

我相信在具备了解决以上三种问题的能力后,刷题之路会如鱼得水!

好了,今天的内容就分享到这,期待我们下次再见!

 

上一篇:减少 try...catch,定义全局统一异常处理器!


下一篇:【LeetCode】【算法】21. 合并两个有序链表