算法基础
Bin682
这个作者很懒,什么都没留下…
展开
-
递归问题:汉诺塔
汉诺塔问题(C语言)题目要求:汉诺塔问题是个典型的函数递归问题古代有一个梵塔,塔内有3个座A,B,C。开始时A上有64个盘子,盘子大小不等,大的在下,小的在上(如图所示)。有一个老和尚想把这64个盘子从A移动到C,但规定每次只允许移动一个盘,且移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求编程输出移动盘子的步骤。思路:总共需要移动大概2ˆ64次盘子,一般人是不可能直接确定每一个具体步骤的但可以这样简单想:假如有另一个和尚能有办法把上面的63个盘子从一个座移动到原创 2021-01-06 14:23:43 · 638 阅读 · 1 评论 -
输入一个字符串,输出单词的个数
输入一个字符串,输出单词的个数(C语言)题目要求:如标题以下为具体代码:#include <stdio.h>int main(){ char string[81]; gets(string); int num=0,word=0,i; char c; for(i=0;(c=string[i])!='\0';i++) if(c==' ') word=0; //当c为空格时候,word置0; else if(c!=' ' && word==0)原创 2021-01-06 14:23:23 · 1473 阅读 · 0 评论 -
编写一个程序,比较两个字符串s1和s2
编写一个程序,比较两个字符串s1和s2(C语言)题目要求:编写一个程序,比较两个字符串s1和s2。若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。不要用strcpy函数以下为具体代码:#include <stdio.h>int main(){ char str1[20]; char str2[20]; gets(str1); gets(str2); int i; for(i=0;i<=19;原创 2021-01-06 14:23:07 · 8625 阅读 · 0 评论 -
有一行电文,按以下规律译成密码
有一行电文,按以下规律译成密码(C语言)题目要求:有一行电文,按以下规律译成密码:即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文以下为具体代码:#include <stdio.h>int main(){ char str[20]; gets(str); printf("Key: "); puts(str); int i; for(i=0;i<=20;i原创 2021-01-06 14:22:47 · 1828 阅读 · 0 评论 -
用折半法找出该数是数组中的第几个元素
用折半法找出该数是数组中的第几个元素(C语言)题目要求:有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半法找出该数是数组中的第几个元素。如果该数不在数组中,则输出“无此数”。以下为具体代码:#include <stdio.h>int main(){ int array[15]={1,11,22,33,44,55,66,77,88,99,111,222,333,444,555}; printf("Please enter a number: ");原创 2021-01-06 14:22:20 · 1870 阅读 · 1 评论 -
找出一个二维数组中的鞍点
找出一个二维数组中的鞍点(C语言)题目要求:如标题,鞍点即该位置上的元素在该行上最大、该列上最小,也可能没有鞍点思路:先找出每行中的最大值,并且确定其位置然后判断该位置的值是否为该列中最小:如果找到比它小的值,则break跳出循环。若始终没break跳出循环,则说明没找到,那么这个数就是鞍点;如果有break跳出循环,那么这个数就不是鞍点以下为具体代码:#include <stdio.h>int main(){ int m,n; printf("Please原创 2021-01-05 16:27:15 · 6027 阅读 · 3 评论 -
输出“魔方阵”
输出“魔方阵”(C语言)题目要求:所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等例如,三阶魔方阵为8 1 63 5 74 9 2思路:把1放在第一行中间对于以后的数(即2~n*n),一般情况是行数i=i-1,列数j=j+1如果一个数在第1行,则下一个数在第n行(列数照常);如果一个数第n列,下一个数第1列(行数照常)如果上一个数是第1行第n列,则把下一个数放在上一个数的下面如果按上面的规则确定的位置上已有数,则也把下一个数放在上一个数的下面(这种情况下,需要把行数j=原创 2021-01-05 14:40:35 · 1124 阅读 · 0 评论 -
输出杨辉三角形
输出以下杨辉三角形(要求输出10行)(C语言)题目要求:如标题11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1…思路:在此三角形中,一个数等于它上面的和左上角的数之和以下为具体代码:#include <stdio.h>int main(){ int array[10][10]; int i,j; for(i=0;i<=9;i++) {原创 2021-01-05 14:11:12 · 1545 阅读 · 0 评论 -
有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中(C语言)题目要求:如标题思路:如果一个数列由小到大排列,则对数列进行反向遍历。当遇到输入的数x大于a[i]时,就跳出循环然后将i后面的数都往后移一位,此时i+1的位置就空出来了,可以把这个x放入这个位置以下为具体代码:#include <stdio.h>int main(){ int a[11]={11,22,33,44,55,66,77,88,99,111}; int x,i,j; printf(原创 2021-01-05 14:02:24 · 9238 阅读 · 4 评论 -
用选择法对10个整数排序
用选择法对10个整数排序(C语言)题目要求:如标题思路:首先令i从0~8遍历,设置最小数的下标min=i然后对于i后面的数进行j遍历,如果a[min]>a[j],则令min=j如果min!=i,则把a[min]和a[i]互换最终打印出10个数字即可以下为具体代码:#include <stdio.h>int main(){ int a[10]; int i,j,t,min; printf("Input 10 numbers: "); for(i=0;i<原创 2021-01-05 13:39:51 · 692 阅读 · 0 评论 -
用筛选法求100以内的素数
用筛选法求100以内的素数(C语言)题目要求:如标题思路:有一个数i,遍历它后面的数如果这些数字能被它整除,则这些数不是素数,把它们的值赋为0如此循环遍历,最后只需要把不是0的数输出即可,这些数就是素数以下为具体代码:#include <stdio.h>#include <math.h>int main(){ int i,j; int a[100]; for(i=0;i<=99;i++) a[i]=i+1; a[0]=0; for(i=原创 2021-01-05 13:24:50 · 378 阅读 · 0 评论 -
用二分法求下面方程(-10,10)的根
用二分法求下面方程(-10,10)的根(C语言)题目要求:如标题,方程为:2xˆ3-4xˆ2+3x-6=0#include <stdio.h>#include <math.h>int main(){ double x,fx,fa,fb,a=-10,b=10; fa=2*a*a*a-4*a*a+3*a-6; fb=2*b*b*b-4*b*b+3*b-6; if(fa*fb<0) { while(fabs(fa-fb)>0.0001) { x原创 2021-01-05 12:45:43 · 2263 阅读 · 0 评论 -
用迭代法求x=sqrt(a)
用迭代法求x=sqrt(a)(C语言)题目要求:如标题,求平方根的迭代公式为 Xn+1=1/2(Xn+a/Xn),要求前后两次求出的x的差的绝对值小于1e-10以下为具体代码:#include <stdio.h>#include <math.h>int main(){ float a; printf("Please enter a: "); scanf("%f",&a); double x1,x2; x2=1.0; while(fabs(x2-x1)&原创 2021-01-05 12:32:51 · 884 阅读 · 1 评论 -
一个数如果恰好等于它的因子之和,这个数就称为“完数”
一个数如果恰好等于它的因子之和,这个数就称为“完数”(C语言)题目要求:如标题,例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有完数,并按下面格式输出其因子:6 its factors are 1,2,3以下为具体代码:#include <stdio.h>int main(){ int n,i; for(n=1;n<=1000;n++) { int sum=0; for(i=1;i<n;i++) { if(原创 2021-01-05 12:24:51 · 7608 阅读 · 4 评论 -
求Sn=a+aa+aaa+aaaa+......+aa...aa
求Sn=a+aa+aaa+aaaa+…+aa…aa(n个a)(C语言)题目要求:如标题,其中a是个数字,n表示a的位数,n由键盘输入思路:每一项等于前面一项乘10再加a以下为具体代码:#include <stdio.h>int main(){ int a=0,n=0,i=0,term=0,Sn=0; printf("Please enter 'a' and 'n': "); scanf("%d %d",&a,&n); for(i=0;i<n;i++)原创 2021-01-05 11:35:18 · 440 阅读 · 0 评论 -
求100~200的全部素数
求100~200的全部素数(C语言)题目要求:如标题思路:对于一个数n,如果这个数能被(2~sqrt(n))中的任何一个整数整除,这个数就不是素数,否则这个数就是素数以下为具体代码:#include <stdio.h>#include <math.h>int main(){ int n,k,i; for(n=100;n<=200;n++) { k=sqrt(n); for(i=2;i<=k;i++) if(n%i==0) b原创 2021-01-04 16:24:43 · 798 阅读 · 0 评论 -
求pi的值
求pi的值(C语言)题目要求:pi/4=1-1/3+1/5-1/7+…求pi的近似值,直到发现某一项的绝对值小于1e-6为止(该项不累加)以下为具体代码:#include <stdio.h>#include <math.h>int main(){ int sign=1; double pi=0.0,n=1.0,term=1.0; while(fabs(term)>=1e-6) { pi=pi+term; n=n+2; sign=-sign;原创 2021-01-04 16:15:08 · 406 阅读 · 0 评论 -
斐波那契数列
斐波那契数列(C语言)描述:斐波那契数列(Fibonacci sequence),指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n ≥ 2,n ∈ N*)具体展开:斐波那契数列可以衍生为一些实际问题,比如爬楼梯问题和兔子繁殖问题爬楼梯问题:小明爬楼梯,他一次可以爬1阶楼梯或者2阶楼梯。如果爬1阶楼梯,共有1种方法;爬2阶楼梯,共有2种方法;爬3阶楼梯,共有3种方法原创 2021-01-02 16:44:41 · 15532 阅读 · 0 评论 -
给出年、月、日,计算该日是该年的第几天
给出年、月、日,计算该日是该年的第几天(C语言)题目要求:如标题思路:首先判断该年是否为闰年。如果是,则令leap=1,否则leap=0在创建一个每个月天数的列表month_day[13]。注意需要创建13个数据,使得第一个数据为0,后面12个数据一次为1~12月的天数(其中第三个数据为28)当leap=1时,令列表的第三个数据,即第二个月为29循环i=1;i<=month-1;i++,令形参day=day+month_day[i]最后的day即为天数以下是具体代码:#inclu原创 2021-01-02 13:33:11 · 2661 阅读 · 1 评论 -
用递归法将一个整数n转换成字符串
用递归法将一个整数n转换成字符串(C语言)题目要求:如标题。例如,输入481,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。思路:设定函数function(int n),令i=n%10,j=n/10如果j>0,则递归function(j)最后输出i以下是具体代码:#include <stdio.h>int main(){ void function(int n); int n; printf("Please input an inte原创 2021-01-02 13:22:29 · 9597 阅读 · 8 评论 -
写一个函数,输入一个十六进制数,输出相应的十进制数
写一个函数,输入一个十六进制数,输出相应的十进制数(C语言)题目要求:如标题思路:十六进制数为:0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)比如0xFF=1516ˆ1+1516ˆ0=255,0xAB=1016ˆ1+1116ˆ0=171设定length=strlen(str)-1,term为每一项的值。同时设定i,令i=0;i<=length;i++a为相应的十六进制数转为十进制数的乘数,即(0~15)此时需要用到pow函原创 2021-01-02 13:15:00 · 5113 阅读 · 1 评论 -
用牛顿迭代法求方程的根
用牛顿迭代法求方程的根(C语言)题目要求:牛顿迭代法是一种重要的基本的求方程根的方法。现有方程为axˆ3+bxˆ2+cx+d=0,系数a,b,c,d的值一次为1,2,3,4,由主函数输入。求x在1附近的一个实根。思路:首先,设fx=axˆ3+bxˆ2+cx+d,则可在坐标图上画出fx。此时fx与横坐标的交点即为方程的,现在来求这个解的值当x0=1时,fx=ax0ˆ3+bx0ˆ2+cx0+d在(x0,fx)上作fx的切线,切线的斜率f为fx求导,得f=3axˆ2+2bx+c,交横坐标于(x1,0)原创 2021-01-02 12:23:13 · 16563 阅读 · 7 评论 -
写一个函数,输入一行字符,将此字符串中最长单词输出
写一个函数,输入一行字符,将此字符串中最长单词输出(C语言)题目要求:如标题思路:有一个原来字符串str,定义一个max字符串和temp字符串先令max[0]=’\0’对于i=0,在s1[i]!=’\0’的情况下令i递加此时,令j=0,当str[i]是字母的时候,temp[j++]=str[i++]令最后的temp[j]=’\0’如果max的长度<temp的长度,则将temp复制给max最后输出max以下是具体代码:#include <stdio.h>#incl原创 2020-12-31 15:03:12 · 2730 阅读 · 1 评论 -
写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数
写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数(C语言)题目要求:如标题以下是具体代码:#include <stdio.h>int main(){ void calculate_characters(char str[]); char string[1000]; printf("please enter a string: "); gets(string); calculate_characters(string原创 2020-12-31 14:54:57 · 7598 阅读 · 3 评论 -
写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字中间空一个空格
写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字中间空一个空格(C语言)题目要求:如输入1990,应输出“1 9 9 0”以下是具体代码:#include <stdio.h>int main(){ void function(int n); int n; printf("please enter a number: "); scanf("%d",&n); function(n); return 0;}vo原创 2020-12-31 14:52:20 · 10953 阅读 · 2 评论 -
写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出
写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出(C语言)题目要求:如标题思路:有原字符串s1定义空字符串s2,对于i=0,在s1[i]!=’\0’的情况下令i递加此时,若s1[i]=元音字母(大小写),令s2[j]=s1[i],并且j递加切勿忘记最后令s2[j]=’\0’,目的是为了让字符串s2终结以下是具体代码:#include <stdio.h>int main(){ void copy_vowel_vocabulary(char s1[])原创 2020-12-31 14:47:34 · 4818 阅读 · 1 评论 -
写一个函数,将两个字符串连接
写一个函数,将两个字符串连接(C语言)题目要求:如标题以下是具体代码:#include <stdio.h>#include <string.h>int main(){ void link_strings(char s1[], char s2[]); char s1[1000]; char s2[1000]; char string[1000]; printf("please enter two string:\n"); ge原创 2020-12-31 14:40:22 · 4212 阅读 · 0 评论 -
写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串
写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串(C语言)题目要求:如标题思路:定义一个空字符串,定义length为原字符串的长度使i=0,j=length-1,在j>=0的情况下i递加,j递减令str_reverse[i]=str[j]切勿忘记最后使得str_reverse[i]=’\0’最后将str_reverse复制给str,因为两者的长度相同以下是具体代码:#include <stdio.h>#include <string.h&g原创 2020-12-31 14:36:36 · 3133 阅读 · 1 评论 -
写一个函数,使给定的一个3*3的二维整型数组转置,即行列互换
写一个函数,使给定的一个3*3的二维整型数组转置,即行列呼唤(C语言)题目要求:如标题思路:现有一个二维数组a[3][3],需要将其转置,可以先定义一个空数组b[3][3]将a[j][i]放入到b[i][j]中,此时b即为a的转置最后把b赋值给a即可以下是具体代码:#include <stdio.h>int main(){ void array_switch(int a[3][3]); int array[3][3]; printf("please原创 2020-12-31 14:27:26 · 22844 阅读 · 6 评论 -
写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息
写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息(C语言)题目要求:如标题思路:需要判断n是否为素数可以定义i,使i从2开始循环到n-1,如果n能被i整除,即跳出循环如果i等于n,则为素数;否则不是素数以下是具体代码:#include <stdio.h>int main(){ void prime_number(int n); int a; printf("Please enter a number: "); scanf("%d原创 2020-12-31 14:17:18 · 28254 阅读 · 4 评论 -
用三个函数求axˆ2+bx+c=0的根
用三个函数求axˆ2+bx+c=0的根(C语言)题目要求:求方程axˆ2+bx+c=0的根,用三个函数分别求当bˆ2-4ac大于0、等于0、小于0时的根并输出结果。从主函数输入a,b,c以下是具体代码:#include <stdio.h>#include <math.h>int main(){ void root_one(int a, int b, int c); void root_two(int a, int b, int c); void r原创 2020-12-31 14:11:51 · 2654 阅读 · 0 评论 -
写两个函数,分别求两个整数的最大公约数和最小公倍数
写两个函数,分别求两个整数的最大公约数和最小公倍数(C语言)题目要求:现在有两个整数a和b,需要求它们的最大公约数和最小公倍数思路:首先,我们可以设定整数i,将a或者b赋值给i然后,使i递减循环(i>=1),当a和b能同时被i整除时,跳出循环此时的i就是最大公约数最小公倍数=a*b/最大公约数以下是具体代码:#include <stdio.h>int main(){ int greatest_common_divisor(int a, int b);原创 2020-12-31 14:04:11 · 10260 阅读 · 1 评论 -
写一个函数,用“起泡法”对输入的10个字符按由小到大顺序排列
写一个函数,用“起泡法”对输入的10个字符按由小到大顺序排列(C语言)题目要求:如标题,起泡法是一种重要的、基本的的排序算法思路:每次将相邻两个数比较,将小的调到前面若有6个数:9,8,5,4,2,0。第一次先将最前面的两个数8和9对调,见图1,第2次将第2和第3个数(9和5)对调…如此共进行5次,得到8-5-4-2-0-9。可以看到,最大的数9已经“沉底”,成为最下面的一个数,而小的数“上升”,最小的数0已向上“浮起”一个位置。经过第1趟(共5次比较和交换)后,已得到最大的数9然后进行第2趟比原创 2021-01-01 13:18:35 · 12154 阅读 · 0 评论