C语言蓝桥杯习题及解析1.docx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言蓝桥杯习题及解析1

/*问题描述  输入一个正整数n,输出n!的值。  其中n!=1*2*3*…*n。算法描述  n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。输入格式  输入包含一个正整数n,n=1000。输出格式  输出n!的准确值。样例输入10样例输出3628800*/#includestdio.h#includestring.h#define MAX 3000int main(){int a[MAX],i,j,n;int c=0; //进位int s;memset(a,0,sizeof(a));scanf(%d,n);a[0]=1;for(i=2;i=n;i++) //乘数?{for(j=0;jMAX;j++){s=a[j]*i+c;a[j]=s%10;c=s/10;}}for(i=MAX-1;i=0;i--) //从第一个不为零的开始?if(a[i])break;for(j=i;j=0;j--){printf(%d,a[j]);}return 0;?}BASIC-29 高精度加法/*问题描述  输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。算法描述  由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。  定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。  计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。  最后将C输出即可。输入格式  输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。输出格式  输出一行,表示a + b的值。样例输入201001222010012212345678902010012220100122样例输出20100122203011233454668012*/#includestdio.h#includestring.h#define MAXa 100#define MAXb 100#define MAXc 105int main(){char a[MAXa],b[MAXb];int i,j,c[MAXc],t,la,lb,n=0;int r=0; //进位scanf(%s%s,a,b);memset(c,0,sizeof(c));la=strlen(a);lb=strlen(b);for(i=la-1,j=lb-1;i=0j=0;i--,j--){t=(a[i]-0)+(b[j]-0)+r;c[n++]=t%10;r=t/10;}if(lalb)for(;j=0;j--){t=b[j]-0+r;c[n++]=t%10;r=t/10;}else if(lalb)for(;i=0;i--){t=a[i]-0+r;c[n++]=t%10;r=t/10;}elsec[n++]=r;for(i=MAXc-1;i=0;i--) //忽略前导0?if(c[i])break;for(j=i;j=0;j--)printf(%d,c[j]);printf(\n);return 0;?}BASIC-28 Huffman树/*问题描述  Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。  给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:  1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。  2. 重复步骤1,直到{pi}中只剩下一个数。  在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。  本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。  例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:  1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并

文档评论(0)

tmd2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档