c语言竞赛和算法总结.doc
《c语言竞赛和算法总结.doc》由会员分享,可在线阅读,更多相关《c语言竞赛和算法总结.doc(23页珍藏版)》请在装配图网上搜索。
计算机程序算法2015算法集1适合算法竞赛或兴趣了解2本套算法均是已实现算法3算法均有本人查阅和自己写4未经允许不得做为商业用途 违者必究作者徐(男)QQ:964092342算法集适合算法竞赛或兴趣了解2015/2/9计算机徐一粟 目录1. 10进制转2进制-42. 啤酒和饮料 -53. 圆的面积 -54. 切面条 -65. 01字符串 -76. 字母图形 -87. 求n 个数的最大值,最小值,和-98. 杨辉三角形 -109. (2个数)公约数,公倍数(三种算法)-1110. 歌手大奖赛 -1611. 输出斐波那契数列第n项的数值-1712. 输出斐波那契数列每一项的数值-1813. Fibonacci 数列其它问题-1914. 求前n项的和1+2+n-2015. 序列求和-2116. 图形显示-2217. 星期几-2218. 16进制转10进制 -2319. 10进制转16进制 -2420. 16进制转8进制 -2521. 判断是否是回文 -2622. 闰年的判断 -2723. 输出c字母图形 -2824. 巴斯卡三角形 -2825. 三色旗 -3026. 回文数-3227. 特殊回文数(普) -3228. 特殊回文数(经) -3429. 特殊的数字 -3530. 查找整数 -3531. 操作格子 -3632. 高精度阶乘n! -3933. 老鼠走迷宫 -4034. 逆序对 -4235. 数列排序 -4536. 数列排序(经) -4537. 第39台阶 -4838. 第39台阶(非递归) -5039. 最短路径 Dijkstar 算法 -5140. 最短路径 Floyd 算法 -5341. 区间K大数查询 -5542. 八皇后递归算法 -57 43. 八皇后回溯算法 -61 44. 八皇后回溯算法2 -6245. 2n皇后问题 -6346. 前缀表达式 -6547. (3个数)最大最小公倍数-6648. 2的次幂问题 -6749. 数的全排列问题 -6950. 猴子吃桃 -7251. 角谷定理 -7252. 高斯日记 -7353. 马虎的算式 -7454. 黄金分连数 -7555. 前缀判断 -7756. 三部排序 -7857. 翻硬币 -7958. 李白打酒(递归) -8159. 李白打酒(二进制) -8260. 普利姆算法 -8461. 深度遍历 -8562. 广度优先遍历 -8763. 两个物种 -8964. 选手答题 -9065. 比酒量 -9166. 盒子取球方法(一) -9267. 盒子取球方法(二) -9368. 大数相乘 -9569. 字母转换为 6 位数字 -9670. 打印图形 -9871. 奇怪的分式 -10072. 六角填数 -10273. 蚂蚁感冒 -10474. 地宫取宝 -10675. 高精度加法 -10976. Huffman树 -11077. 报时助手 -11178. 回形取数 -11379. 龟兔赛跑预测 -11480. 芯片测试 -11681. FJ的字符串 -11782. Since之舞 -11883. 数的读法 -11984. 完美的代价 -12185. 矩形的面积交 -12386. 矩阵乘法 -12587. 质因数分解 -12688. 字符串对比 -12889. 时间转换 -12990. 出现次数最多的整数 -12991. 捉鬼大师 -131有些算法在你不明白时,最好在稿纸上走一遍,这样可以更好地理解算法。有些算法可能已优化,有些未优化,但结果是正确的,可能时间上和空间上有点浪费。纯属个人整理,如有差错还请见谅!算法实现一,将10进制转为二进制/*如输入:13输出:1101*/#includeint fact(int n)if(n2)/将2换成其它数如8就可输出8进制的结果 return n;elsereturn fact(n/2)*10+n%2;/将二进制结果整个输出 int main(void)int n;printf(Enter n:);scanf(%d,&n);printf(%d,fact(n);return 0;二,标题:啤酒和饮料/* 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。 注意:答案是一个整数。请通过浏览器提交答案。不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。*/#includeint main(void)for(int i=1;i*2.382.3;i+)for(int j=i+1;i*2.3+j*1.9=82.3-0.000001&i*2.3+j*1.9=82.3+0.000001)printf(%dn,i);return 0;三,圆的面积/*问题描述给定圆的半径r,求圆的面积。输入格式输入包含一个整数r,表示圆的半径。输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。说明:在本题中,输入是一个整数,但是输出是一个实数。对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误。实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。样例输入4样例输出50.2654825数据规模与约定1 = r = 10000。提示本题对精度要求较高,请注意的值应该取较精确的值。你可以使用常量来表示,比如PI=3.14159265358979323,也可以使用数学公式来求,比如PI=atan(1.0)*4。*/#include#define PI 3.14159265358979323int main(void) int r;double result;scanf(%d,&r);result=PI*(r*1.0)*(r*1.0); printf(%.7f,result);return 0;四,标题:切面条/* 一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。 如果连续对折2次,中间切一刀,可以得到5根面条。 那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。不要填写任何多余的内容。*/#includeint main(void)int num=2;for(int i=1;i=10;i+)num=num*2-1;printf(%d : %dn,i,num);return 0;五,01字符串/*对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:0000000001000100001100100请按从小到大的顺序输出这32种01串。输入格式本试题没有输入。输出格式输出32行,按从小到大的顺序每行一个长度为5的01串。*/常用算法#includeint main(void)int count=0;int i,j,k,l,m;for(i=0;i=1;i+)for(j=0;j=1;j+)for(k=0;k=1;k+)for(l=0;l=1;l+)for(m=0;m=1;m+)printf(%d%d%d%d%dn,i,j,k,l,m);count+;printf(count=%dn,count);return 0;经典算法#include int main(void) int i; for (i = 0; i 32; i+) printf(%d%d%d%d%dn, i/16%2, i/8%2, i/4%2, i/2%2, i%2); return 0;六,字母图形/*ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。*/#include#include#define MAXINE 26void print(char aMAXINEMAXINE,int m,int n)int i,j;for(i=0;im;i+)for(j=0;jn;j+)printf(%c,aij);printf(n); void creat(char aMAXINEMAXINE,int m,int n)/主要是这段代码 int j;char str;for(int i=0;im;i+)str=A;for(j=i;j=0;j-)aij=+str;print(a,m,n);int main(void)int n,m;char aMAXINEMAXINE;printf(Enter m and n(m行n列):);scanf(%d%d,&m,&n);creat(a,m,n);return 0;七,求n 个数的最大值,最小值,和/*输入格式第一行为整数n,表示数的个数。第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。如输入:Enter n:5-1 5 9 32 2输出 max=32min=-1sum=47*/ #include#include#define MAXINE 10000int main(void)int i,n,min=MAXINE,max=-MAXINE;int sum=0,aMAXINE;printf(Enter n:);scanf(%d,&n);for(i=0;in;i+) scanf(%d,&ai);if(aimax)max=ai;sum+=ai;printf(max=%dn,max);printf(min=%dn,min);printf(sum=%dn,sum);return 0;八,杨辉三角形/*它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。下面给出了杨辉三角形的前4行: 1 1 1 1 2 11 3 3 1给出n,输出它的前n行。输入格式输入包含一个数n。输出格式输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格*/#include#include#define MAXINE 100int main(void)int j,i;int n;int aMAXINEMAXINE;printf(Enter n:);scanf(%d,&n);a00=1;/第一个数置为1for(i=0;in;i+) /注意i从0开始,第一个for循环将每行的第一位和最后一位都置1ai0=aii=1;for(j=1;ji;j+)/这个for循环是为每行的数值进行(除角标第一个和最后一个的)运算 aij=ai-1j-1+ai-1j;for(i=0;in;i+)for(j=0;jb) a=a-b;else b=b-a;printf(最大公约数是:%dn,a);/这里a或b都可以 printf(最小公倍数是:%dn,m*n/a);return 0; */方法三 穷举法int main(void)int i=1,a,b,t,m,n;printf(Enter a and b:);scanf(%d%d,&a,&b);m=a,n=b;while(i=a)if(a%i=0&b%i=0) t=i; i+;/*for(i=1;i=a;i+) if(a%i=0&b%i=0) t=i;*/printf(最大公约数是:%dn,t);printf(最小公倍数是:%dn,m*n/t);return 0;最小公倍数与最大公约数的三种算法最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积最大公约数求最大公约数算法:(1)辗转相除法有两整数a和b: a%b得余数c 若c=0,则b即为两数的最大公约数 若c0,则a=b,b=c,再回去执行例如求27和15的最大公约数过程为:2715 余121512余3123余0因此,3即为最大公约数#includevoid main() /* 辗转相除法求最大公约数 */ int m, n, a, b, t, c; printf(Input two integer numbers:n); scanf(%d%d, &a, &b); m=a; n=b; while(b!=0) /* 余数不为0,继续相除,直到余数为0 */ c=a%b; a=b; b=c; printf(The largest common divisor:%dn, a); printf(The least common multiple:%dn, m*n/a); 相减法有两整数a和b: 若ab,则a=a-b 若a12 ) 15123( 123 )1239( 93 ) 936( 63 )633( 3=3 )因此,3即为最大公约数#includevoid main ( ) /* 相减法求最大公约数 */ int m, n, a, b, c; printf(Input two integer numbers:n); scanf (%d,%d, &a, &b);m=a; n=b; /* a, b不相等,大数减小数,直到相等为止。*/ while ( a!=b) if (ab) a=a-b; else b=b-a; printf(The largest common divisor:%dn, a); printf(The least common multiple:%dn, m*n/a);穷举法有两整数a和b: i=1 若a,b能同时被i整除,则ti i+ 若 i a(或b),则t即为最大公约数,结束改进: i= a(或b) 若a,b能同时被i整除,则i即为最大公约数,结束 i-,再回去执行有两整数a和b: i=1 若a,b能同时被i整除,则ti i+ 若 i a(或b),则t即为最大公约数,结束改进: i= a(或b) 若a,b能同时被i整除,则i即为最大公约数,结束 i-,再回去执行#includevoid main () /* 穷举法求最大公约数 */ int m, n, a, b, i, t; printf(Input two integer numbers:n); scanf (%d,%d, &a, &b);m=a; n=b; for (i=1; i0; t- ) if ( a%t = 0 & b%t =0 ) break; */十,歌手大奖赛/*在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。题目条件不变,但考虑同时对评委评分进行裁判,即在10个评委中找出最公平和最不公平在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。输入:Input number1=90Input number2=91Input number3=93Input number4=94Input number5=90Input number6=99Input number7=97Input number8=92Input number9=91Input number10=95输出: Canceled max score:99Canceled min score:90Averagescore:92*/#includeint main(void)int integer,i,max,min,sum;max=-32768;min=32767;sum=0; for(i=1;imax)max=integer; if(integermin)min=integer; printf(Canceled max score:%dnCanceled min score:%dn,max,min);printf(Averagescore:%dn,(sum-max-min)/8);十一,输出斐波那契数列第n项的数值 /*输入:Enter n:10输出: 55*/#include stdio.hint feibo(int n)if(n=2) return 1;else return feibo(n-1)+feibo(n-2); int main(void)int n;printf(Enter n:);scanf(%d,&n);printf(%dt,feibo(n);return 0;十二,输出斐波那契数列每一项的数值/*输入:Enter n:10输出:1 1 2 3 5 8 13 21 34 55*/#include stdio.hint feibo(int n)if(n=2|n=1) return 1;else return feibo(n-1)+feibo(n-2); int main(void)int n,i=1;printf(Enter n:);scanf(%d,&n);while(i=n) /主要是这一点不同 printf(%dt,feibo(i); i+;return 0;十三,Fibonacci数列其它问题/*问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式输入包含一个整数n。输出格式输出一行,包含一个整数,表示Fn除以10007的余数。说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。样例输入10样例输出55样例输入22样例输出7704*/ #includeint a1000001;int main()int i,n;a1=1;a2=1;for(i=3;i=1000000;i+) ai=(ai-1+ai-2)%10007;scanf(%d,&n);printf(%dn,an);return 0;十四,求前n项的和1+2+n问题描述求1+2+3+.+n的值。输入格式输入包括一个整数n。输出格式输出一行,包括一个整数,表示1+2+3+.+n的值。样例输入4样例输出10样例输入100样例输出5050数据规模与约定1 = n = 1,000,000,000。说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都正确了你的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低。想要得到详细的请购买http:/item.taobao.com/item.htm?spm=a230r.1.14.30.APiNJM&id=45381318739&ns=1&abbucket=12#detail或者淘宝搜索C语言算法总结购买完全的。保证每一个程序都正确。著作权所有,用着请谨慎!- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 竞赛 算法 总结
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文