![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++语言算法程序设计类
居之无倦,行之以忠
TYUT-阿靓
展开
-
算法的五大特性
1.输入:在算法中可以有零个或者多个输入2.输出:在算法中至少有一个或者多个输出3.有穷行:在执行有限的步骤之后,自动结束不会出现无限循环并且每一个步骤在可接受的时间内完成4.确定性:算法的每一个步骤都具有确定的含义,不会出现二义性5.可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限的次数完成。1.输入:在算法中可以有零个或者多个输入2.输出:在算法中至少有一个或者多个输出3.有穷行:在执行有限的步骤之后,自动结束不会出现无限循环并且每一个步骤在可接受的时间内完成4.原创 2022-02-21 09:39:05 · 5563 阅读 · 0 评论 -
实例五十五:字符串统计问题
实例五十五:字符串统计问题问题描述:统计一个短字符串在另一个长字符串中出现的次数。算法思路#include<stdio.h>原创 2019-10-14 22:50:33 · 229 阅读 · 0 评论 -
实例五十四:最长共子序列问题
实例五十四:最长共子序列问题问题描述:编写程序,解决最长共子序列问题:给定两个序列 X = { x1 , x2 , … , xm } 和 Y = { y1 , y2 , … , yn } ,找出 X 和 Y 的最长公共子序列。PS:一个给定序列的子序列是在该序列中删去若干元素后得到的序列。如果序列 { b,c,d,b} 是序列 {a,b,c,b,d,a,b} 的子序列。给定两个序列 X ...原创 2019-10-14 17:57:09 · 234 阅读 · 0 评论 -
实例五十三:字符串处理
实例五十三:字符串处理问题描述:编制一个字符串处理程序,实现将已知字符串 s 中的前导空白类字符和尾随的空白字符去掉,并将字符串字符中之间的连续多个空白字符缩减为一个空白字符。算法思路:...原创 2019-10-03 20:45:25 · 344 阅读 · 1 评论 -
实例五十二:进制转换
实例五十二:进制转换问题描述:将十进制的实数转换成二进制数。算法思路:将十进制数转换成二进制数时应同时考虑整数部分的转换和小数部分的转换。十进制整数 m 对应的二进制数串就是 m%2 余数的逆序,十进制小数 n 对应的二进制数串就是 n*2 的整数位的顺序,然后将其相加。例如:123.45,整数部分是 123,小数部分是 0.45,则 123(+)=1111011(=)所以,123...原创 2019-10-02 11:40:35 · 284 阅读 · 0 评论 -
实例五十一:分数数列求和
实例五十一:分数数列求和问题描述:设数列 {ai} 的各项是斐波那契数列 {fi} 的前后两项 fi,fi+1 之商,即 f1=f2=1,当 i>2 时 fi=fi-2+fi-1,而 ai=fi/fi+1 例如,{fi} 的前六项为 1,1,2,3,5,8,而{ai} 的前5项为 1,1/2,2/3,3/5,5/8。求出数列 {an} 的前 n 项(n>1)的部分和 Sn ,并...原创 2019-10-02 10:29:53 · 1984 阅读 · 0 评论 -
实例五十:兔子繁衍问题
实例五十:兔子繁衍问题问题描述:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第 3 个月后每个月又生一对兔子,假如兔子都不死,问以后每个月的兔子总数为多少。算法思路:显然前两个月都只有一对兔子,其增长率为数列 1,1,2,3,5,8,13,21…,即从第三项开始每一项都是前面两项的和。这其实就是计算并输出 Fibonacci 数列的前 n 项,即:F1 = 1 ...原创 2019-10-02 00:05:52 · 193 阅读 · 0 评论 -
实例四十九:筛选法
实例四十九:筛选法问题描述:用筛选法求指定范围内全部素数。算法思路:筛选法求素数基本原则就是“筛”掉指定范围内的非素数。比如,要求 100 以内的所有素数,先将 2~100 之间的数按顺序放到一维数组中,从数组中先找出最小的素数(即 2 ),然后将该素数的倍数从数组中“筛”掉,其方法就是将数组中该素数的倍数的那些元素置 0 .再从数组中找出次小的非零数(即下一个素数),重复以上步骤,...原创 2019-10-01 23:50:42 · 526 阅读 · 0 评论 -
实例四十八:最大公因式问题
实例四十八:最大公因式问题问题描述:编制利用辗转相除法求两个多项式的最大公因式。算法思路:设多项式的系数按照幂次由高到低的顺序存于一维数组中,多项式的最高幂次存于一变量中。辗转相除法求两多项式去除另一个多项式,然后将所得余式变成除式,原除式变为被除式。如此反复相除,直到余式为零,最后的除式即为最大公因式。#include<stdio.h>#define N 10in...原创 2019-09-29 22:58:30 · 1177 阅读 · 0 评论 -
实例四十七:统计数组元素出现次数
实例四十七:统计数组元素出现次数问题描述:从键盘输入 n(0<n<100) 个整数,计算并输出其中出现次数最多且数值最大的元素及出现次数。算法思路:首先要明白题目的要求:“出现次数最多且数值最大”,显然,出现次数最多是主要条件,也就是说,当有 “3个2” 与 “2个3” 时,结果是 “3个2”。First of all, we must understand the re...原创 2019-09-18 22:10:11 · 754 阅读 · 2 评论 -
实例四十六:数组元素平移
实例四十六:数组元素平移问题描述:将一维数组中的所有元素循环向右平移若干位(要求移动次数不超过数组的长度)。Returns all elements in a dimension array to the right(requires the number of moves not to exceed the length of the array).算法分析:为了达到总移动次数不...原创 2019-09-16 21:19:22 · 2488 阅读 · 0 评论 -
实例四十五:递归全排列
实例四十五:递归全排列**问题描述:**使用递归方法对数组元素进行全排列输出。算法思路:设X={x1,x2,…,xn}是要进行全排列的 n 个元素,集合 X 的全排列记为 Perm(X)。当 n=1 时,X 的元素是唯一的,那么 X 的全排列也是唯一的;当 n>1 时,X 的全排列由以下 n-1 元素进行全排列构成:(x1)Perm(X-{x1}),(x2)Perm(X-{x2}...原创 2019-09-07 09:21:44 · 103 阅读 · 0 评论 -
实例四十四:两路归并排序
实例四十四:两路归并排序问题描述:将两个有序字符串合并连接成另一有序字符串。Combine two ordered strings into another ordered string.算法思路:将有序字符串 a 和 b 合并为有序字符串 c,我们先将 c 设置为空字符串,然后将 a 或 b 中的字符逐个插入到 c 中。为了使 c 中字符有序,设两个指针 i 和 j 分别指向 a...原创 2019-09-07 00:21:00 · 468 阅读 · 0 评论 -
实例四十三:数组压缩问题
实例四十三:数组压缩问题问题描述:将无序数组压缩成不重复的有序数组,即去掉元数组中的重复出现的元素,并将补重复的元素按照从小到大顺序存储在原数组中。Compressing an unordered array into a non-repeating ordered array removes the recurring elements from the meta array and s...原创 2019-09-05 11:09:09 · 601 阅读 · 0 评论 -
实例四十二:因子和问题
实例四十二:因子和问题问题描述:输出 1-N (N<32 768) 之间所有同时满足下列条件的整数对(A,B):(1)3<A<B<=N;(2)A 的因子之和等于 B,且 B 的因子之和等于 A ( X 的因子和是指除了 X 以外的所有因子之和)。算法思路:...原创 2019-09-03 23:19:21 · 136 阅读 · 0 评论 -
实例四十一:连续整数和问题
实例四十一:连续整数和问题问题描述:给定一个整数 x ,求出所有连续的且和为 x 的正整数。比如对于整数 27 ,结果为 2~7 、8~10、13、和14,因为这些连续整数的和都是 27。Given an integer x , find all consecutive positive integers with a sum of x. For example, for the inte...原创 2019-09-03 12:02:45 · 473 阅读 · 0 评论 -
实例四十:密码问题
实例四十:密码问题问题描述:某公司采用公共电话传递数据,每个数据都是四位的整数(类似电报编码),在传递过程是加密的,加密规则如下:每位数字都加 5 ,除以 10 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,试编写该加密数据的复原程序。A company uses public telephones to transmit data. Each data is a fou...原创 2019-09-03 11:45:46 · 337 阅读 · 0 评论 -
实例三十九:卡布列克运算
实例三十九:卡布列克运算问题描述:所谓卡布列克运算是指对任意一个四位数,只要它们各个位上的数字不完全相同,就是这样的规律:原创 2019-09-03 08:16:31 · 2062 阅读 · 0 评论 -
实例三十八:银行卡问题
实例三十八:银行卡问题问题描述:某银行共发出 M 张储蓄卡,每张储蓄卡拥有唯一的卡号,每天每张储蓄卡至多允许持卡者进行 N 笔“存款”或“取款”业务。A bank issued a total of M savings cards, each of which has a unique card number, and each of the savings cards per day a...原创 2019-08-29 20:33:51 · 527 阅读 · 0 评论 -
实例三十六:精确除法计算(*)
实例三十六:精确除法计算问题描述:使用数组精确计算 M/N(0<M<N<100)的值。如果 M/N 是无限循环小数,则计算输出它的第一个循环节,并输出循环节的起止位置。The value of M/N (0<M<N<100) is accurately calculated using an array. If M/N is an infinite lo...原创 2019-08-25 11:58:13 · 1508 阅读 · 0 评论 -
实例三十五:猴子分桃问题
实例三十五:猴子分桃问题问题描述:海滩上有一堆桃子,五只猴子来分。第 1 只猴子把这堆桃子平均分成五份,多了一个,这只猴子把多余的一个吃了,拿走了一份,第 2 只猴子把剩下的桃子又分了五份,又多了一个,它同样把多的一个吃掉,拿走了一份,第 3、第 4、第 5只猴子都是这样做的,问海滩上原来有多少个桃子。There are a bunch of peaches on the beach an...原创 2019-08-25 11:23:41 · 754 阅读 · 0 评论 -
实例三十四:求组合数
实例三十四:求组合数问题描述:求n ! / (m ! * (n- m) !)算法思路:由于组合数表达式就是三个阶乘的算术运算,所以只要定义一个求阶乘的函数,然后进行调用即可。#include<stdio.h>int fac(int n){ int res = 1,i; for(i=1;i<n;i++) res*=i; ...原创 2019-08-24 20:41:16 · 365 阅读 · 0 评论 -
实例三十三:循环检查满足条件的数
实例三十三:循环检查满足条件的数问题描述:对于两个给定的素数 x 和 y ,求满足下列条件的最小自然数 N,即从 N 开始的每个自然数都能表示成 x 的倍数和 y 的倍数之和,即表示成 N = m1 * x + m2 * y ,其中m1,m2都为自然数。For the two given prime numbers x and y, find the minimum natural num...原创 2019-08-24 12:25:08 · 175 阅读 · 0 评论 -
实例三十二:贪心算法应用
实例三十二:贪心算法应用问题描述(Problem Description):输入某单位某职工的工资,求出发放工资时该职工工资,求出发放工资时该职工工资所需不同币值的张数,设币值面额有 100,50,10,5,2,1,0.5,0.2,0.1。 Enter the salary of a certain employee of a certain unit, find the salary...原创 2019-08-24 11:34:12 · 287 阅读 · 0 评论 -
实例三十一:进制转换
实例三十一:进制转换问题描述:将一个十六进制数转换为相应的十进制数输出。算法思路:十六进制某些数位不属于十进制整型数据,所以为了便于取出十六进制数的每个位数,应用字符串来表示一个十六进制数。...原创 2019-08-23 19:34:34 · 196 阅读 · 0 评论 -
实例三十:与或位运算
与或位运算问题描述:编写一个程序,其功能是将正整行数组中所有元素转换为不大于它们的最大偶数,并显示输出。算法思路:只需要将该正整数所对应的二进制数的最低位清零。 “按位与”运算有将数据中指定位清零的功能,如果将数 x 的第 n 和 m 位清零,就将 x 与 y 作“按位与”运算,其中 y 所对应的二进制数除了第 n 和 m 位为 0 外,其他位都为 1 。#include<...原创 2019-08-23 19:24:53 · 179 阅读 · 0 评论 -
实列二十九:移位运算
实例二十九:移位运算问题描述:编写一个程序,其功能是:从键盘输入一个无符号整数 m 以及位移位数 n ,当 n>0 时,将 m 循环右移 n 位;当 n<0 时,将 m 循环左移 |n| 位。算法思路:用 sizeof() 函数确定一个无符号整数所占据的二进制位数 k 。如果是循环右移,则先将 m 右移 n 位(即将原数的高 k - n 位移到低位),再将 m 左移 k...原创 2019-08-23 18:59:06 · 198 阅读 · 0 评论 -
实例二十八:链表的应用
实例二十八:链表的应用** 问题描述:**由键盘随即输入若干个整数,设计程序输出给定的整数并统计每个整数出现的频次(相同的不重复记录,模拟进阿里文章单字索引表)。算法思路:本实例主要目的就是掌握动态分配函数 malloc 的应用以及创建链表的方法。链表是指若干个数据(结点)按一定规律连接起来,前一个结点指向下一个结点,只能通过前一个结点才能找到下一个结点。用结构体变量和指针并结合动...原创 2019-08-22 10:54:31 · 183 阅读 · 0 评论 -
实例二十七:共用体的应用
实例二十七:共用体的应用问题描述:编写程序,使用函数调用,将一个 unsigned long 型整数的前两个字节和后两个字节作为 unsigned int 型整数输出。#include<stdio.h>union aa //定义共用体类型{ unsigned short a[2]; unsigned long...原创 2019-08-22 09:30:32 · 734 阅读 · 0 评论 -
实例二十六:统计多个学生的多门课的成绩
实例二十六:统计多个学生的多门课的成绩问题描述:设有10个学生,每个学生的数据包括学号、姓名、三门课的成绩。要求从键盘输入10个学生的数据,统计并打印三门课的平均成绩,以最高分的学生的数据(包括学号、姓名、三门课的成绩、平均成绩)。算法思路:程序心得:...原创 2019-08-20 10:57:08 · 1305 阅读 · 0 评论 -
实例二十五:结构体的应用(*)
结构体的应用问题描述:实现两个分数的加法和减法运算,负分数的分子为负数。#include<stdio.h>#include<math.h>struct fenshu{ int fm; int fz;};//计算两个分子的和int gcd(int m,int n){ int t,r; if(n>m) { t=n;n=m;m=t; ...原创 2019-08-20 10:42:48 · 196 阅读 · 0 评论 -
实例二十四:利用指针传递参数值
实例二十四:利用指针传递参数值问题描述编写交换两个数的函数,分别使用指针变量和整型变量作参数。/*实例二十四:利用指针传递参数值*/#include<stdio.h>int swap1(int a,int b){ int t; t=a;a=b;b=t; return 0;}int swap2(int *pa,int *pb){ i...原创 2019-08-19 20:34:11 · 276 阅读 · 0 评论 -
实例二十三:指针综合应用
实例二十三:指针综合应用问题描述:输入一个字符串,内有数字和非数字字符,如:a123x466 34x > 302addfds46要求将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a【0】中,466放在a【1】中,……,统计有多少个整数,并输出这些整数。算法思路:指针函数就是返回值类型是指针类型。程序心得:思考拓展:提示:改进程序:...原创 2019-08-19 15:18:49 · 162 阅读 · 0 评论 -
实例二十二:指针函数的应用(*)
实例二十二:指针函数的应用问题描述:有若干个学生的成绩(每个学生有四门课程),找出其中有不及格课程的学生及其学号。#include<stdio.h>#define N 5 //假设有5个学生float *search(float(*p)[4]) //查找行指针变量p所指行是否有不及格的,若有就返回p所指的首地址,否则返回NU...原创 2019-08-17 10:51:27 · 281 阅读 · 0 评论 -
实例二十一:函数指针的使用(*)
实例二十一:函数指针的使用问题描述:编写一个程序,在从键盘上输入 sin、cos或tan时,可求出正弦、余弦、正切在10°、20°、30°、40°、50°、60°时的函数值。#include <stdio.h>#include <math.h>#include<string.h>int main(void){ char ch[10];...原创 2019-08-17 09:29:01 · 449 阅读 · 0 评论 -
实例二十:数组指针的使用(*)
实例二十:数组指针的使用问题描述:利用数组指针求给定n*n矩阵的转置矩阵,并计算对角线元素之和。#include <stdio.h>#define N 4int main(void){ int a[N][N],(*p)[N]; int i, j, t, s=0; printf("input a:\n"); for(i=0;i<N;...原创 2019-08-15 21:52:58 · 210 阅读 · 0 评论 -
实例十九:指针数组的应用(*)
实例十九:指针数组的应用(*)问题描述:在主函数中输入10个长度不超过10的字符串,用另一个函数对它们排序,然后在主函数输出这10个已排好序的字符串。要求用指针数组来处理。#include <stdio.h>#include <string.h>int sort(char*p[],int n){ int i, j, k; char temp[...原创 2019-08-15 21:47:43 · 219 阅读 · 0 评论 -
实例十七:数组作为函数参数的应用(分糖)
实例十七:数组作为函数参数的应用(分糖)问题描述:10个小孩围成一圈分糖。首先,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后按照如下方法将每个小孩子手中的糖果进行调整:所有的小孩检查自己手中的糖果数,如果糖果为奇数,则向老师再要一块,再同时将自己手中的糖...原创 2019-08-15 21:25:57 · 194 阅读 · 0 评论 -
实例十六:二维数组的应用(矩阵相乘)
实例十六:二维数组的应用(矩阵相乘)问题描述:编写矩阵A与矩阵B的乘积矩阵C。/*实例十六:二维数组的应用(矩阵相乘)*/#include<stdio.h>#define N 4#define M 5#define K 3int main(void){ int a[N][M], b[M][K], c[N][K]; int i, j, l, s;...原创 2019-08-13 22:12:58 · 1369 阅读 · 0 评论 -
实例十五:一维数组的应用
实例十五:一维数组的应用问题描述:通过键盘任意输入20个数,并将它们从大到小输出。#include <stdio.h>#define N 20int main(void){ int a[N], i, j, t; printf("Input 20 numbers:\n"); for(i=0;i<20;i++) scanf("...原创 2019-08-13 21:57:52 · 389 阅读 · 0 评论