
算法问题
嵇微元
这个作者很懒,什么都没留下…
展开
-
最长公共子序列
《计算机算法设计与分析》(第5版)王晓东 编著给定两个序列X和Y,当另一个序列Z既是X的序列又是Y的序列时,称Z是序列X和Y的公共子序列。由最优子结构建立递归关系:当i>0,j=0时,c[i][j]=0当i,j>0且xi==yi时,c[i][j]=c[i-1][j-1]+1当i,j>0且xi!=yi时,c[i][j]=max{c[i][j-1],c[i-1][j]}#...原创 2019-11-17 22:21:21 · 222 阅读 · 0 评论 -
排列的字典序问题
Problem Descriptionn个元素{1,2,……, n }有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,…,n!-1。每个排列的编号为其字典序值。例如,当n=3时,6 个不同排列的字典序值如下:给定n以及n个元素{1,2,……, n }的一个排列,计算出这个排列的字典序值,以及按字典序排列的下一个排列。Input输入数据的第1行是元素个数n(n≤20)。接下...原创 2019-11-09 11:34:19 · 1398 阅读 · 0 评论 -
算法实现题 2-13 标准 2 维表
《计算机算法设计与分析》(第5版)王晓东编著 第44页问题描述:设 n 是一个正整数。2n 的标准 2 维表是由正整数 1,2,…,2n 组成的 2n 数组,该数组的每行从左到右递增,每列从上到下递增。2n 的标准 2 维表全体记为 Tab(n)。例如当 n=3 时 Tab(3)如下:编程任务:给定正整数 n,计算 Tab(n)中 2n 的标准 2 维表的个数。数据输入:由文件 inpu...原创 2019-11-08 21:50:31 · 789 阅读 · 0 评论 -
算法实现题 2-12 双色 Hanoi 塔
《计算机算法设计与分析》(第5版)王晓东编著 第44页问题描述:设 A、B、C 是 3 个塔座。开始时,在塔座 A 上有一叠共 n 个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为 1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座 A 上的这一叠圆盘移到塔座 B 上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:规则(1):每次只...原创 2019-11-08 21:14:12 · 557 阅读 · 0 评论 -
算法实现题 2-10 集合划分
《计算机算法设计与分析》(第5版)王晓东编著 第43页问题描述:n 个元素的集合{1,2,···, n }可以划分为若干个非空子集。例如,当 n=4 时,集合{1,2,3,4}可以划分为 15 个不同的非空子集如下:{{1},{2},{3},{4}},{{1,2},{3},{4}},{{1,3},{2},{4}},{{1,4},{2},{3}},{{2,3},{1},{4}},...原创 2019-11-08 20:35:59 · 2709 阅读 · 0 评论 -
算法实现题 2-8 有重复元素的排列
《计算机算法设计与分析》(第五版)刘晓东编著 第42页问题描述:设 R={ r1 ,r2, ···,rn }是要进行排列的 n 个元素。其中元素 r1 ,r 2, ···,rn可能相同。试设计一个算法,列出 R 的所有不同排列。编程任务:给定 n 以及待排列的 n 个元素。计算出这 n 个元素的所有不同排列。数据输入:由文件 input.txt 提供输入数据。文件的第 1 行...原创 2019-11-08 17:31:25 · 1302 阅读 · 1 评论 -
算法实现题 2-6 半数单集
《计算机算法设计与分析》(第5版)王晓东编著 第43页问题描述:给定一个自然数 n,由 n 开始可以依次产生半数集 set(n)中的数如下。(1) n∈set(n);(2) 在 n 的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3) 按此规则进行处理,直到不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136}。半数集 set(6)中有 6 ...原创 2019-11-08 16:17:40 · 522 阅读 · 0 评论 -
算法实现题 2-5 半数集
《计算机算法设计与分析》(第5版)41页问题描述:给定一个自然数 n,由 n 开始可以依次产生半数集 set(n)中的数如下。(1) n∈set(n);(2) 在 n 的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3) 按此规则进行处理,直到不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136}。半数集 set(6)中有 6 个元素。注意半...原创 2019-11-07 22:26:14 · 351 阅读 · 0 评论 -
十种排序算法
1.选择排序#include <stdio.h>#include <stdlib.h>int a[101];int main(){ int i,j,t,n; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i...原创 2019-11-05 22:10:43 · 131 阅读 · 0 评论 -
金币阵列问题
算法实现题 1-4 金币阵列问题 《计算机算法设计与分析》第9页´问题描述:有m ´ n(m £ 100,n £ 100) 个金币在桌面上排成一个m 行 n 列的金币阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0 表示金币正面朝上,1 表示背面朝上。金币阵列游戏的规则是:(1)每次可将任一行金币翻过来放在原来的位置上;(2)每次可任选 2 列,交换这 2 列金币的位置。...原创 2019-11-02 20:35:50 · 617 阅读 · 1 评论 -
最多约数问题
《计算机算法设计与分析》(第5版)第8页算法实现题 1-3 最多约数问题´问题描述:正整数 x 的约数是能整除 x 的正整数。正整数 x 的约数个数记为 div(x)。例如,1,2,5,10 都是正整数 10 的约数,且 div(10)=4。设 a 和 b 是 2 个正整数,a≤b,找出 a 和 b之间约数个数最多的数 x。´编程任务:对于给定的 2 个正整数 a≤b,编程计算 a ...原创 2019-11-02 16:52:56 · 414 阅读 · 0 评论 -
循环赛日程表
设有2k个运动员要进行网球循环赛,现要设计一个满足以下条件的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次。(2)每个选手一天只能赛一次。(3)循环赛一共进行n-1天。按此要求可将比赛日程表设计成n行,n-1列的表。在表中第i行和第j列处填入第i个选手在第j天所遇到的选手。#include <stdio.h>#include <stdlib.h>in...原创 2019-10-11 19:51:18 · 160 阅读 · 0 评论 -
快速排序
快速排序算法是基于分治策略的一个排序算法。《计算机算法设计与分析》(第5版)24页。#include <stdio.h>#include <stdlib.h>int a[10001];int Partition(int a[],int p,int r);void QuickSort(int a[],int p,int r){ if(p<r) ...原创 2019-10-10 21:10:06 · 68 阅读 · 0 评论 -
合并排序
合并排序算法是用分治策略实现对n个元素进行排序的算法,其基本思想是:将待排序元素分成大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成要求的排好序的集合。《计算机算法算法设计与分析》22页。#include <stdio.h>#include <stdlib.h>int a[10001],b[10001];void Merge(int a[...原创 2019-10-10 16:12:41 · 279 阅读 · 0 评论 -
二分搜索技术(二分查找)
#include <stdio.h>#include <stdlib.h>int BinarySearch(int a[],int l,int r,int k){ int mid; while(l<=r) { mid=(l+r)/2; if(a[mid]==k)return mid; els...原创 2019-10-09 21:20:39 · 281 阅读 · 0 评论 -
Hanoi塔问题
《计算机算法设计与分析》14页。#include <stdio.h>#include <stdlib.h>void Hanoi(int n,char a,char b,char c){ if(n==1)printf("move %d from %c to %c\n",n,a,c); else { Hanoi(n-1,a,c,b...原创 2019-10-09 21:12:22 · 81 阅读 · 0 评论 -
整数划分问题
《计算机算法设计与分析》13页。将正整数n表示成一系列正整数之和。正整数n的不同划分个数称为正整数n的划分数。例如6有11中划分。6; 5+1;4+2;4+1+1;3+3;3+2+1;3+1+1+1;2+2+2;2+2+1+1;2+1+1+1+1;1+1+1+1+1+1;#include <stdio.h>#include <stdlib.h>int q(int ...原创 2019-10-09 21:06:36 · 77 阅读 · 0 评论 -
Ackerman函数
#include <stdio.h>#include <stdlib.h>int Ackerman(int n,int m){ int y; if(n==1&&m==0)y=2; else if(n==0)y=1; else if(m==0)y=n+2; else y=Ackerman(Ackerman(n-1...原创 2019-10-07 11:10:17 · 103 阅读 · 0 评论 -
Fibonacci数列
求Fibonacci数列的第n项,项数从0开始计数。#include <stdio.h>#include <stdlib.h>int f(int n){ int y; if(n==0)y=1; else if(n==1)y=1; else { y=f(n-1)+f(n-2); } return...原创 2019-10-07 11:03:34 · 105 阅读 · 0 评论 -
阶乘函数
阶乘函数的递归实现:#include <stdio.h>#include <stdlib.h>int f(int n){ int y; if(n==0)y=1; else { y=n*f(n-1); } return y;}int main(){ int n; scanf("%d"...原创 2019-10-07 10:57:36 · 281 阅读 · 0 评论 -
算法实现题 1-1 统计数字问题
问题描述:一本书的页码从自然数 1 开始顺序编码直到自然数 n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字 0。例如,第 6 页用数字 6 表示,而不是 06 或 006 等。数字计数问题要求对给定书的总页码 n,计算出书的全部页码中分别用到多少次数字 0,1,2,…,9。编程任务:给定表示书的总页码的 10 进制整数 n (1≤n≤109) 。编程计算书的全部页码中分...原创 2019-09-21 10:37:58 · 2152 阅读 · 0 评论