C++基础算法

合集下载

10个经典的C语言面试基础算法及代码

10个经典的C语言面试基础算法及代码

10个经典的C语言面试基础算法及代码10个经典的C语言面试基础算法及代码算法是一个程序和软件的灵魂,下面店铺为大家整理了10个经典的C语言面试基础算法及代码,希望能帮到大家!1、计算Fibonacci数列Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。

C语言实现的代码如下:/* Displaying Fibonacci sequence up to nth term where n is entered by user. */#includeint main(){int count, n, t1=0, t2=1, display=0;printf("Enter number of terms: ");scanf("%d",&n);printf("Fibonacci Series: %d+%d+", t1, t2); /* Displaying first two terms */count=2; /* count=2 because first two terms are already displayed. */while (count<n){display=t1+t2;t1=t2;t2=display;++count;printf("%d+",display);}return 0;}结果输出:Enter number of terms: 10Fibonacci Series: 0+1+1+2+3+5+8+13+21+34+也可以使用下面的.源代码:/* Displaying Fibonacci series up to certain number entered by user. */#includeint main(){int t1=0, t2=1, display=0, num;printf("Enter an integer: ");scanf("%d",&num);printf("Fibonacci Series: %d+%d+", t1, t2); /* Displaying first two terms */display=t1+t2;while(display<num){printf("%d+",display);t1=t2;t2=display;display=t1+t2;}return 0;}结果输出:Enter an integer: 200Fibonacci Series: 0+1+1+2+3+5+8+13+21+34+55+89+144+2、回文检查源代码:/* C program to check whether a number is palindrome or not */#includeint main(){int n, reverse=0, rem,temp;printf("Enter an integer: ");scanf("%d", &n);temp=n;while(temp!=0){rem=temp%10;reverse=reverse*10+rem;temp/=10;}/* Checking if number entered by user and it's reverse number is equal. */if(reverse==n)printf("%d is a palindrome.",n);elseprintf("%d is not a palindrome.",n);return 0;}结果输出:Enter an integer: 1232112321 is a palindrome.3、质数检查注:1既不是质数也不是合数。

10个经典的C语言基础算法及代码

10个经典的C语言基础算法及代码

10个经典的C语言基础算法及代码1.冒泡排序算法冒泡排序是一种简单但效率较低的排序算法,在每一轮遍历中比较相邻的两个元素,如果顺序不正确则交换它们,直到整个数组有序为止。

```cvoid bubbleSort(int arr[], int n)for (int i = 0; i < n-1; i++)for (int j = 0; j < n-1-i; j++)if (arr[j] > arr[j+1])int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}```2.选择排序算法选择排序是一种简单直观的排序算法,它每次从待排序的数组中选择最小(或最大)的元素,并放到已排序的数组末尾。

```cvoid selectionSort(int arr[], int n)for (int i = 0; i < n-1; i++)int min_index = i;for (int j = i+1; j < n; j++)if (arr[j] < arr[min_index])min_index = j;}}int temp = arr[i];arr[i] = arr[min_index];arr[min_index] = temp;}```3.插入排序算法插入排序的基本思想是将数组分为已排序和未排序两部分,每次将未排序的元素插入到已排序的合适位置。

```cvoid insertionSort(int arr[], int n)for (int i = 1; i < n; i++)int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key)arr[j+1] = arr[j];j--;}arr[j+1] = key;}```4.快速排序算法快速排序使用分治法的思想,每次选择一个基准元素,将小于基准的元素放到左边,大于基准的元素放到右边,然后递归地对左右两个子数组进行排序。

c语言基础算法题

c语言基础算法题

c语言基础算法题【原创版】目录1.C 语言基础算法题概述2.C 语言基础算法题分类3.C 语言基础算法题解题思路与方法4.C 语言基础算法题实例解析5.总结正文【1.C 语言基础算法题概述】C 语言基础算法题主要涉及一些基本的数据结构和算法,如数组、链表、栈、队列、排序、查找等。

这类题目在编程初学者的学习过程中非常常见,有助于巩固基础知识,提升编程能力。

【2.C 语言基础算法题分类】C 语言基础算法题可以分为以下几类:(1)数组与字符串:涉及数组的操作、字符串的操作等。

(2)链表与栈:涉及链表、栈的基本操作和应用。

(3)队列与队列:涉及队列、队列的应用等。

(4)排序与查找:涉及各种排序算法、查找算法等。

(5)其他:涉及一些常见的编程题目,如汉诺塔、八皇后等。

【3.C 语言基础算法题解题思路与方法】解决 C 语言基础算法题,首先要了解相关数据结构和算法的原理,熟悉基本的编程语法。

解题过程中,需要注意以下几点:(1)分析题目,明确需求,确定解题思路。

(2)选择合适的数据结构和算法。

(3)编写代码时,注重代码风格和注释,保证代码可读性。

(4)调试代码,确保程序正确性。

(5)总结经验,不断优化解题方法。

【4.C 语言基础算法题实例解析】以冒泡排序算法为例:题目:编写一个冒泡排序算法,对给定数组进行升序排序。

解题思路:(1)遍历数组,比较相邻两个元素,如果前一个元素大于后一个元素,则交换它们的位置。

(2)经过一轮遍历,最大元素将被放到数组的末尾。

(3)重复以上过程,直至整个数组有序。

代码示例:```c#include <stdio.h>void bubble_sort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, n);printf("Sorted array is:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("");return 0;}```【5.总结】C 语言基础算法题是编程初学者学习过程中必须要掌握的内容。

C语言算法全总结

C语言算法全总结

C语言算法全总结C语言是一种广泛应用于计算机科学领域的编程语言,具有高效、可移植和灵活的特点。

在程序设计中,算法是解决问题的一系列有序步骤,可以通过C语言来实现。

本文将为您总结C语言中常用的算法,包括排序算法、查找算法和图算法。

一、排序算法排序算法是将一组元素按照特定的顺序重新排列的算法。

常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序和归并排序。

这些算法的核心思想是通过比较和交换元素的位置来进行排序。

1.冒泡排序冒泡排序通过多次比较和交换相邻元素的位置来实现排序。

它的基本思想是将最大的元素不断地往后移动,直到整个序列有序。

2.选择排序选择排序通过每次选择最小的元素来实现排序。

它的基本思想是通过比较找到最小元素的位置,然后将其与第一个元素交换,接着在剩下的元素中继续找到最小元素并进行交换,如此重复直到整个序列有序。

3.插入排序插入排序通过构建有序序列,对未排序序列逐个元素进行插入,从而实现排序。

它的基本思想是将当前元素插入到前面已经排好序的序列中的适当位置。

4.快速排序快速排序是一种分治算法,通过选择一个基准元素,将其他元素划分为小于基准元素和大于基准元素的两部分,然后递归地对这两部分进行排序,最终实现整个序列有序。

5.归并排序归并排序也是一种分治算法,将序列分成两个子序列,分别对这两个子序列进行排序,然后将排序后的子序列合并成一个有序序列,从而达到整个序列有序的目的。

二、查找算法查找算法是在一个数据集合中寻找特定元素的算法。

常见的查找算法包括线性查找、二分查找和散列查找。

这些算法的核心思想是通过比较元素的值来确定待查找元素的位置。

1.线性查找线性查找是从数据集合的开头开始,依次比较每个元素的值,直到找到目标元素为止。

它的时间复杂度为O(n),其中n为数据集合的大小。

2.二分查找二分查找是针对有序序列进行查找的算法,它的基本思想是通过不断缩小查找范围,将目标元素与中间元素进行比较,从而确定待查找元素的位置。

C语言基本算法

C语言基本算法

C语言基本算法C语言是一种广泛使用的编程语言,用于开发各种应用程序和系统。

算法是编程的核心部分,是解决问题的方法和步骤的描述。

在C语言中,有许多基本算法可以用来解决简单级别的问题。

下面我将介绍几种常见的C语言基本算法。

1.线性查找算法线性查找算法是一种简单的查找算法,它从数组的第一个元素开始顺序地比较,直到找到目标元素或遍历完整个数组。

这个算法的时间复杂度是O(n)。

```cint linearSearch(int arr[], int n, int target)for (int i = 0; i < n; i++)if (arr[i] == target)return i;}}return -1;```这个算法接受一个整数数组arr、数组的大小n和目标元素target 作为输入,并返回目标元素在数组中的索引,如果未找到则返回-12.冒泡排序算法冒泡排序是一种简单的排序算法,它通过多次循环比较和交换相邻元素来排序。

每次循环都将最大的元素冒泡到数组的末尾。

这个算法的时间复杂度是O(n^2)。

```cvoid bubbleSort(int arr[], int n)for (int i = 0; i < n-1; i++)for (int j = 0; j < n-i-1; j++)if (arr[j] > arr[j+1])int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}```这个算法接受一个整数数组arr和数组的大小n作为输入,并将数组按升序排序。

3.二分查找算法二分查找算法是一种高效的查找算法,它使用分治策略将有序数组分为两部分,并选择中间元素进行比较。

如果中间元素等于目标元素,则返回中间元素的索引;否则,如果中间元素大于目标元素,则在左侧部分继续查找;如果中间元素小于目标元素,则在右侧部分继续查找。

这个算法的时间复杂度是O(logn)。

C语言常用简单算法

C语言常用简单算法

C语言常用简单算法C语言是一门功能强大的编程语言,其算法也是很多的。

下面是一些常用的简单算法:1.二分查找算法:二分查找是一种在有序数组中查找特定元素的算法。

它的基本思想是首先在数组的中间位置找到待查找的元素,如果该元素等于目标值,则查找成功;如果该元素大于目标值,说明目标值在数组的前半部分,则在前半部分继续进行查找;如果该元素小于目标值,则说明目标值在数组的后半部分,则在后半部分继续进行查找。

重复以上步骤,直到找到目标值或者确定目标值不存在。

2.冒泡排序算法:冒泡排序是一种简单直观的排序算法。

它的基本思想是通过反复交换相邻的两个元素,将较大的元素逐渐往后移动,从而实现排序的目的。

具体实现时,每一轮比较都会使最大的元素移动到最后。

3.插入排序算法:插入排序是一种简单直观的排序算法。

它的基本思想是将数组分成已排序部分和未排序部分,每次从未排序部分取出一个元素,然后将该元素插入到已排序部分的合适位置,从而实现排序的目的。

4.选择排序算法:选择排序是一种简单直观的排序算法。

它的基本思想是每次选择一个最小(或最大)的元素放到已排序部分的末尾,从而实现排序的目的。

具体实现时,每一轮选择都通过比较找出未排序部分的最小(或最大)元素。

5.快速排序算法:快速排序是一种高效的排序算法。

它的基本思想是通过选取一个基准元素,将数组分成两个子数组,一个子数组中的元素都小于基准元素,另一个子数组中的元素都大于基准元素,然后对这两个子数组分别进行快速排序,最终实现排序的目的。

6.斐波那契数列算法:斐波那契数列是一列数字,其中每个数字都是前两个数字之和。

常见的斐波那契数列算法有递归算法和迭代算法。

递归算法通过反复调用自身来计算斐波那契数列的值,而迭代算法则通过循环来计算。

7.求最大公约数算法:求两个数的最大公约数是一种常见的问题。

常见的求最大公约数的算法有欧几里得算法和辗转相除法。

欧几里得算法通过不断用较小数除以较大数的余数,直到余数为0,得到最大公约数。

C语言入门必学—10个经典C语言算法

C语言入门必学—10个经典C语言算法C语言是一种广泛使用的编程语言,具有高效、灵活和易学的特点。

它不仅在软件开发中被广泛应用,也是计算机科学专业的必修课。

在学习C语言的过程中,掌握一些经典的算法是非常重要的。

本文将介绍10个经典C语言算法,帮助读者更好地了解和掌握C语言。

一、冒泡排序算法(Bubble Sort)冒泡排序算法是最简单、也是最经典的排序算法之一。

它通过不断比较相邻的元素并交换位置,将最大(或最小)的元素逐渐“冒泡”到数组的最后(或最前)位置。

二、选择排序算法(Selection Sort)选择排序算法是一种简单但低效的排序算法。

它通过不断选择最小(或最大)的元素,并与未排序部分的第一个元素进行交换,将最小(或最大)的元素逐渐交换到数组的前面(或后面)。

三、插入排序算法(Insertion Sort)插入排序算法是一种简单且高效的排序算法。

它通过将数组分为已排序和未排序两个部分,依次将未排序部分的元素插入到已排序部分的合适位置。

四、快速排序算法(Quick Sort)快速排序算法是一种高效的排序算法。

它采用了分治的思想,通过将数组分为较小和较大两部分,并递归地对两部分进行排序,最终达到整个数组有序的目的。

五、归并排序算法(Merge Sort)归并排序算法是一种高效的排序算法。

它采用了分治的思想,将数组一分为二,递归地对两个子数组进行排序,并将结果合并,最终得到有序的数组。

六、二分查找算法(Binary Search)二分查找算法是一种高效的查找算法。

它通过不断将查找范围折半,根据中间元素与目标值的大小关系,缩小查找范围,最终找到目标值所在的位置。

七、递归算法(Recursive Algorithm)递归算法是一种通过自我调用的方式解决问题的算法。

在C语言中,递归算法常用于解决树的遍历、问题分解等情况。

八、斐波那契数列算法(Fibonacci Sequence)斐波那契数列是一列数字,其中每个数字都是前两个数字的和。

C语言常用的入门算法

C语言常用的入门算法C语言是一种广泛应用的编程语言,主要用于开发系统软件和应用程序。

对于初学者来说,了解一些常用的入门算法可以帮助他们掌握基本的编程技巧和思维方式。

以下是C语言常用的入门算法。

1.顺序结构:按照顺序执行代码。

这是C语言中最基础的算法结构。

例如,计算两个数的和:先输入两个数,然后将它们相加。

2. 分支结构:根据条件选择执行不同的代码块。

这是通过if-else语句实现的。

例如,判断一个数是奇数还是偶数:如果数除以2的余数为0,则为偶数,否则为奇数。

3. 循环结构:重复执行一段代码,直到满足一些条件。

这是通过for、while或do-while语句实现的。

例如,打印1到10的所有整数:使用for循环从1到10循环遍历,并打印每个数。

4.数组:一组相同类型的数据的集合。

可以使用循环结构对数组进行遍历和操作。

例如,计算一个数组的总和:使用循环遍历数组的每个元素,并将它们相加。

5.字符串操作:处理文本的一系列算法。

C语言中字符串是以字符数组的形式存储和操作的。

例如,计算字符串的长度:使用循环遍历字符串,直到找到字符串的结束符'\0'。

6.排序算法:将一组数据按照一定的顺序排列的算法。

常用的排序算法有冒泡排序、插入排序和快速排序等。

例如,使用冒泡排序对一组数进行排序:比较相邻的两个数,如果它们的顺序不正确,则交换位置。

7.查找算法:在一组数据中查找一些特定值的算法。

常用的查找算法有线性查找和二分查找等。

例如,使用线性查找在数组中查找一个数:遍历数组,逐个比较每个元素,直到找到目标数或遍历结束。

8.递归:一个函数调用自身的过程,可以用来解决一些重复性的问题。

例如,计算阶乘:使用递归调用函数自身,直到达到基本情况并返回结果。

10.文件操作:C语言中可以使用文件操作来读写文件。

例如,读取文件中的内容并打印:打开文件,逐行读取文件内容,然后打印。

这些算法只是C语言中的一小部分,但对于初学者来说足够入门,并可以帮助他们培养基本的编程思维和解决问题的能力。

C语言常用算法大全

C语言常用算法大全1.排序算法-冒泡排序:依次比较相邻的两个元素,如果顺序不对则交换,每轮找出一个最大或最小的元素-选择排序:从未排序的元素中选择最小或最大的放到已排序的最后,以此类推-插入排序:将未排序的元素插入到已排序的合适位置,从后向前进行比较和交换-快速排序:选择一个基准元素,将小于基准元素的放在左边,大于基准元素的放在右边,然后对左右两边递归地进行快速排序-归并排序:将待排序的序列不断划分为左右两部分,分别排序后再将排序好的左右两部分按顺序合并-堆排序:构建大顶堆,将堆顶元素与末尾元素交换,然后重新调整堆,重复这个过程直到排序完成2.查找算法-顺序查找:从给定的元素序列中逐个比较,直到找到目标元素或遍历完整个序列-二分查找:对于有序序列,在序列的中间位置比较目标元素和中间元素的大小关系,通过每次缩小一半的范围来查找目标元素-插值查找:根据目标元素与有序序列的最小值和最大值的比例推测目标元素所在的位置,然后递归地进行查找-斐波那契查找:根据斐波那契数列的性质来确定目标元素所在的位置,然后递归地进行查找3.图算法-深度优先(DFS):从图的一些顶点出发,依次访问其未被访问过的邻接顶点,直到所有顶点都被访问过为止-广度优先(BFS):从图的一些顶点出发,逐层遍历图的顶点,直到所有顶点都被访问过为止- 最小生成树算法:Prim算法和Kruskal算法,用于找到连接图中所有顶点的最小权值边,构成一棵包含所有顶点的生成树- 最短路径算法:Dijkstra算法和Floyd-Warshall算法,用于找到图中两个顶点之间的最短路径-拓扑排序:用于有向无环图(DAG)中的顶点排序,确保排序后的顶点满足所有依赖关系-关键路径算法:找出网络中的关键路径,即使整个工程完成的最短时间4.字符串算法- KMP算法:通过预处理模式串构建next数组,利用next数组在匹配过程中跳过一部分不可能匹配的子串- Boyer-Moore算法:从模式串的末尾开始匹配,利用坏字符和好后缀规则进行跳跃匹配- Rabin-Karp算法:利用哈希函数对主串和匹配串的子串进行哈希计算,然后比较哈希值是否相等- 字符串匹配算法:BM算法、Shift-And算法、Sunday算法等,用于寻找模式串在主串中的出现位置5.动态规划算法-最长公共子序列(LCS):用于寻找两个序列中最长的公共子序列-最长递增子序列(LIS):用于寻找给定序列中最长的递增子序列-0-1背包问题:将有限的物品放入容量为C的背包中,使得物品的总价值最大-最大子数组和:用于求解给定数组中连续子数组的最大和-最大正方形:在给定的0-1矩阵中,找出只包含1的最大正方形的边长这些算法是在C语言中常用的算法,它们涵盖了排序、查找、图、字符串和动态规划等多个领域。

C语言基本算法

C语言基本算法C语言是一门用于编写计算机程序的高级编程语言,其特点是语法简洁、表达力强,广泛应用于科学计算、系统开发等领域。

在C语言中,算法是解决问题的关键,因此掌握基本算法对于学习和使用C语言非常重要。

本文将介绍C语言中一些简单级别的基本算法。

1.顺序查找算法顺序查找算法是一种简单的算法,用于在一个无序数组中查找目标元素。

它的基本思想是逐个比较数组中的元素,如果找到目标元素则返回其索引,否则返回-12.二分查找算法二分查找算法是一种高效的算法,用于在一个有序数组中查找目标元素。

它的基本思想是将数组分成两半,判断目标元素在哪一半中,然后再在该半中进行查找,如此循环直到找到目标元素或确定不存在。

3.冒泡排序算法冒泡排序算法是一种简单的排序算法,用于将一个无序数组按照升序或降序排列。

它的基本思想是从数组的第一个元素开始,两两比较相邻元素的大小并交换位置,按照此规则不断遍历数组直到排序完成。

4.选择排序算法选择排序算法是一种简单的排序算法,用于将一个无序数组按照升序或降序排列。

它的基本思想是从数组中选择最小(或最大)的元素并放置到第一个位置,然后在剩余的元素中选择最小(或最大)的元素并放置到第二个位置,如此循环直到排序完成。

5.插入排序算法插入排序算法是一种简单的排序算法,用于将一个无序数组按照升序或降序排列。

它的基本思想是将数组分为已排序部分和未排序部分,每次从未排序部分选取一个元素插入到已排序部分的适当位置,如此循环直到排序完成。

6.计数排序算法计数排序算法是一种简单的排序算法,适用于待排序的元素是有限个数的情况。

它的基本思想是统计数组中每个元素出现的次数,然后根据统计结果重新排列数组。

7.求和算法求和算法是一种简单的计算算法,用于计算一个数组中所有元素的和。

它的基本思想是遍历数组,累加每个元素的值得到最终结果。

8.求平均值算法求平均值算法是一种简单的计算算法,用于计算一个数组中所有元素的平均值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、数学问题:1、素数判断a、判断一个数是不是素数b、利用筛选法,求出2----1000000中素数的个数。

2、最大公约数3、最小公倍数4、素因数分解二、数据处理:1、数据查找:顺序查找、二分(折半)查找,查找第k小元素。

2、甲、乙两人同时从A地出发要尽快同时赶到B地。

出发时A地有一辆可带一人的小车。

又甲、乙两人步行速度相同。

问,怎样利用小车才能使两人尽快同时到达。

输入:S=120 (AB两地之间的距离) a = 5 (步行速度)b = 25 (汽车速度)输出:T= 9.60输入:S=200 (AB两地之间的距离) a = 30 (步行速度)b = 50 (汽车速度)输出:T= 5.1433、数据插入:顺序插入、二分插入4、排序:冒泡排序、选择排序、插入排序、快速排序归并排序(提高组)、堆排序(提高组)、希尔排序(提高组)5、数据合并:两个有序数组归并为一个有序数组(相同数据只取一个)6、多项式。

输入两个多项式的系数和指数,求两个多项式的和。

7、矩阵:a、矩阵相乘b、稀疏矩阵的存储,相乘三、高精度运算1、任意进制转换2、高精度四则运算加、减、乘(高精*单精,高精*高精)、除法(高精/高精,高精/单精)四、字符串1、子串:求一个字符串的所有子串2、回文数的判断3、统计文章中单词的数目五、数据模拟1、约瑟夫问题(用静态指针模拟)有编号为1,2…n的n 个人按顺时针方向围坐一圈,每人持有一个正整数密码开始给定一个正整数m,从第一人按顺时针方向自1开始顺序报数,报到m者出围坐的圈子,不在参加报数,这时将出列者的密码作为m,出列者顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人都出围坐。

请编写程序输出出列的顺序。

e.g: 1 2 3 4 5 {围坐者的序号}8 7 3 6 5{围坐者的密码}初始态:m=18当报数到序号为3的人时,应该出列,结果:1 2 4 5 {围坐者的序号}8 7 6 5{密码}此时m=3,从4号开始报数……答案:出列的顺序:3 1 4 2 52、奇数幻方设有n*n 方格的棋盘(n为奇数),将1,2,…..n*n个数填入到棋盘中,使所有的行、列、对角线的和都相等。

例如:N=3采用对角线走向的算法步骤1:1 的位置是(n div 2 +1, n )步骤2:若a[i,j] = k ,k+1的位置在k的右下角,如果右下角已经有数据,则放在k同一行的前一个位置;如果行溢出,则将其行号改为1;如果列溢出,则将其列号改为1;如果行列同时溢出,则放在k同一行的前一个位置。

六、排列组合问题1、全排列非递归算法。

1…N的全排列。

(元素不重复)组合的非递归算法。

2、1..n中选m个元素的递归算法。

(元素不重复)输入:m,n 输出:总个数、各种组合(排列)3、n个元素中最多、最少取m个的排列、组合4、全组合算法。

砝码称重:设有1g,2g,,5g,,10g,20g,50g的砝码个数分别为3 ,4,5,0,2,7,问用这些砝码可称出多少种不同的重量。

5、n个元素中取m个的排列、组合(n个元素可重复,元素重复个数不定)。

例如:A ,B中取3个元素的全排列和组合。

排列(AAA,AAB,ABA,BAA,ABB,BAB,BBA,BBB)组合(AAA,AAB,ABB,BBB)6、无重复元素的环状的排列问题七、递归与回溯算法1、13皇后问题2、0-1背包问题(要求有分枝限界)3、数字的拆分问题4、旅行商问题5、赛程安排问题.有n(n=2^m)编号为1 到n的运动队,参加某项运动的单循环比赛,请安排一个比赛日程?(共n-1天比赛,每天每队必须比赛一场)。

八、表达式的处理。

(表达式中包括”+”、”-“、”*”、”/”,”(”,”)”)1、一个代数表达式的合法性判断2、一个代数表达式的求值3、删除表达式中多余的括号九、树1、输入一棵树的节点数、父节点,求一棵树的度和深度**2、哈夫曼编码的生成算法。

**十、图论1、深度优先搜索和广度优先搜索算法(用来求图的连通分支数,图的遍历)A、倒水问题B、细胞问题一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

如:阵列023*******103456050020456006710000000089有4个细胞。

2、图的一笔画问题3、图的最短路径问题(Dijkstra)**4、图的最小生成树(MST)**5、图的拓扑排序及其应用**6、图的关键路径算法**十一、动态规划1、最长公共子序列2、最长不降子序列3、石子合并问题**(以上带**初中不要求)十二、递归和分治题1:组合数comb.pas时间限制:1s 输入文件:comb.in 输出文件:comb.out在n 个数据(1-n的整数)中选m个数据进行组合。

在输入文件的第一行是n 和m, (n,m<6), 输出各对组合到文件中,每对组合占一行,最后一行是组合的总数。

例如:输入:4 2输出:1 21 31 42 32 43 46题2 数的计算(20分) (count.pas ,count.in ,count.out)问题描述我们要求找出具有下列性质数的个数(包含输入的自然数n):先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:1. 不作任何处理;2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半;3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.样例: 输入: 6满足条件的数为 6 (此部分不必输出)162612636136输出: 6题3(2001分区联赛普及组)求先序排列给出一棵二叉树的中序与后序排列。

求出它的先序排列。

(约定树结点用不同的大写字母表示,长度<=8)。

样例输入:BADC BDCA输出:ABCD(已知中序与先序排列,求出它的后序排列)题4、2的幂次方(98分区联赛普及组)任何一个正整数都可以用2的幂次方表示.例如:137=2^7+2^3+2^0同时约定次方用括号来表示,即a^b可表示为a(b)由此可知,137可表示为:2(7)+2(3)+2(0)进一步:7=2^2+2+2^0 (2^1用2表示)3=2+2^0所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)又如:1315=2^10+2^8+2^5+2+1所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 输入:正整数(n<=20000)输出:符合约定的n的0,2表示(在表示中不能有空格)题5 数的查找问题表述:对于给定的n个数组a [1..n],要求从中找出第k小的元素。

输入:第一行是总数n和k,第二行是n个待比较的元素。

输出:第k小的数在数组中的位置。

样例输入:5 323 8 91 56 4样例输出: 1题6 FBI树(fbi.pas/dpr/c/cpp)【问题描述】我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。

FBI树是一种二叉树[1],它的结点类型也包括F结点,B结点和I结点三种。

由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:1) T的根结点为R,其类型与串S的类型相同;2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。

现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历[2]序列。

【输入文件】输入文件fbi.in的第一行是一个整数N(0 <= N <= 10),第二行是一个长度为2N的“01”串。

【输出文件】输出文件fbi.out包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

【样例输入】310001011【样例输出】IBFBBBFIBFIIIFF【数据规模】对于40%的数据,N <= 2;对于全部的数据,N <= 10。

题7 残缺棋盘问题残缺棋盘(defective chessboard)是一个有2k×2k 个方格的棋盘,其中恰有一个方格残缺。

现在要求用三格板覆盖棋盘,在此覆盖中两块三格板也不能覆盖,三格板也不能覆盖在残缺的方格上。

当k=1 时,各种可能如图1 所示,其中残缺部分用阴影表示。

图1三格板的四个不同方向如下图所示:第一行输入棋盘总行数,第二行输入残缺的格子坐标。

输出:覆盖的矩阵图样例输入: 44 1样例输出:2 2 3 32 1 1 34 4 1 50 4 5 5。

相关文档
最新文档