[算法]有趣算法合辑[21-30]
来源:互联网 发布:kafka 数据粒度 编辑:程序博客网 时间:2024/06/16 06:50
题目21:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。2.程序源代码:
main(){int n,t,number=20;float a=2,b=1,s=0;for(n=1;n<=number;n++) { s=s+a/b; t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/ }printf("sum is %9.6f\n",s);}
题目22:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘。2.程序源代码:
main(){float n,s=0,t=1;for(n=1;n<=20;n++) { t*=n; s+=t; }printf("1+2!+3!...+20!=%e\n",s);}
题目23:利用递归方法求5!。
1.程序分析:递归公式:fn=fn_1*4!2.程序源代码:
#include "stdio.h"main(){int i;int fact();for(i=0;i<5;i++) printf("\40:%d!=%d\n",i,fact(i));}int fact(j)int j;{int sum;if(j==0) sum=1;else sum=j*fact(j-1);return sum;}
题目24:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第
3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道
第四人的岁数,依次类推,推到第一人(10岁),再往回推。
2.程序源代码:
age(n)int n;{int c;if(n==1) c=10;else c=age(n-1)+2;return(c);}main(){ printf("%d",age(5));}
题目25:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
1. 程序分析:学会分解出每一位数2.程序源代码:
main( ){long a,b,c,d,e,x;scanf("%ld",&x);a=x/10000;/*分解出万位*/b=x%10000/1000;/*分解出千位*/c=x%1000/100;/*分解出百位*/d=x%100/10;/*分解出十位*/e=x%10;/*分解出个位*/if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b); else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c); else if (d!=0) printf("there are 2, %ld %ld\n",e,d); else if (e!=0) printf(" there are 1,%ld\n",e);}
题目26:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
1.程序分析:同25例2.程序源代码:
main( ){long ge,shi,qian,wan,x;scanf("%ld",&x);wan=x/10000;qian=x%10000/1000;shi=x%100/10;ge=x%10;if (ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/ printf("this number is a huiwen\n");else printf("this number is not a huiwen\n");}
题目27:对10个数进行排序
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
2.程序源代码:
#define N 10main(){int i,j,min,tem,a[N];/*input data*/printf("please input ten num:\n");for(i=0;i<N;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("\n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");/*sort ten num*/for(i=0;i<N-1;i++){min=i;for(j=i+1;j<N;j++)if(a[min]>a[j]) min=j;tem=a[i];a[i]=a[min];a[min]=tem;}/*output data*/printf("After sorted \n");for(i=0;i<N;i++)printf("%5d",a[i]);}
题目28:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
2.程序源代码:
main(){int a[11]={1,4,6,9,13,16,19,28,40,100};int temp1,temp2,number,end,i,j;printf("original array is:\n");for(i=0;i<10;i++) printf("%5d",a[i]);printf("\n");printf("insert a new number:");scanf("%d",&number);end=a[9];if(number>end) a[10]=number;else {for(i=0;i<10;i++) { if(a[i]>number) {temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } }}for(i=0;i<11;i++) printf("%6d",a[i]);}
题目29:将一个数组逆序输出。
1.程序分析:用第一个与最后一个交换。2.程序源代码:
#define N 5main(){ int a[N]={9,6,5,4,1},i,temp; printf("\n original array:\n"); for(i=0;i<N;i++) printf("%4d",a[i]); for(i=0;i<N/2;i++) {temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; }printf("\n sorted array:\n");for(i=0;i<N;i++) printf("%4d",a[i]);}
题目30:打印出杨辉三角形(要求打印出10行如下图)
1.程序分析:1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
2.程序源代码:
main(){ int i,j; int a[10][10]; printf("\n"); for(i=0;i<10;i++) { a[i][0]=1; a[i][i]=1; } for(i=2;i<10;i++) for(j=1;j<i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) { for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); }}
12 0
- [算法]有趣算法合辑[21-30]
- [算法]有趣算法合辑[1-10]
- [算法]有趣算法合辑[11-20]
- [算法]有趣算法合辑[31-40]
- 粒子群算法资源合辑
- 遗传算法合集
- c# 算法合集
- 排序算法合集
- 一组合算法。
- 算法小集合
- 算法合集
- js算法合集
- 神奇算法小集合
- 算法合集
- java 合婚算法
- 神奇算法小集合
- 排序算法合集
- 贪婪算法合集
- clang和gcc的对比,来看看哪个更具有优势!
- linux命令(一)
- oracle动态游标实例
- 天使爱美丽经典台词语录片段对白分享
- 〖特大號廢柴の劍風〗第一篇,自我介紹
- [算法]有趣算法合辑[21-30]
- Linux下用C语言设置和获取系统时间
- Unable to execute dex
- Unicode与FFFE(记一个蛋疼的项目)
- Android 源代码中增加新apk
- View及ViewGroup的事件分发及传递(二)
- ios 加载本地的Html文件
- 笔记 第22章软件安装和tarball包 鸟哥的linux私房菜第三版
- HDU 3549Flow Problem(网络流之最大流)