蓝桥杯c语言程序题题库,C语言的蓝桥杯习题及解析.docx

253b171540df25e1b84436cbe50dfc72.gifC语言的蓝桥杯习题及解析.docx

/*问题描述输入一个正整数 n,输出 n的值。其中 n1*2*3n。算法描述n可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组 A 来表示一个大整数 a,A0表示 a 的个位,A1表示 a 的十位,依次类推。将 a 乘以一个整数 k 变为将数组 A 的每一个元素都乘以 k,请注意处理相应的进位。首先将 a 设为 1,然后乘 2,乘 3,当乘到 n 时,即得到了 n的值。输入格式输入包含一个正整数 n,nincludedefine MAX 3000int mainint aMAX,i,j,n;int c0; 进位int s;memseta,0,sizeofa;scanf“d“,a01;fori2;i0;i 从第一个不为零的开始 ifaibreak;forji;j0;jprintf“d“,aj;return 0; BASIC-29 高精度加法/*问题描述输入两个整数 a 和 b,输出这两个整数的和。a 和 b 都不超过 100 位。算法描述由于 a 和 b 都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。定义一个数组 A,A0用于存储 a 的个位,A1用于存储 a 的十位,依此类推。同样可以用一个数组 B 来存储 b。计算 c a b 的时候,首先将 A0与 B0相加,如果有进位产生,则把进位(即和的十位数)存入 r,把和的个位数存入 C0,即 C0等于A0B010。然后计算 A1与 B1相加,这时还应将低位进上来的值 r 也加起来,即 C1应该是 A1、B1和 r 三个数的和如果又有进位产生,则仍可将新的进位存入到 r 中,和的个位存到 C1中。依此类推,即可求出 C 的所有位。最后将 C 输出即可。输入格式输入包括两行,第一行为一个非负整数 a,第二行为一个非负整数 b。两个整数都不超过 100 位,两数的最高位都不是 0。输出格式输出一行,表示 a b 的值。样例输入201001222010012212345678902010012220100122样例输出20100122203011233454668012*/includeincludedefine MAXa 100define MAXb 100define MAXc 105int mainchar aMAXa,bMAXb;int i,j,cMAXc,t,la,lb,n0;int r0; 进位scanf“ss“,a,b;memsetc,0,sizeofc;lastrlena;lbstrlenb;forila-1,jlb-1;i0i,jtai-0bj-0r;cnt10;rt/10;ifla0;jtbj-0r;cnt10;rt/10;else iflalbfor;i0;itai-0r;cnt10;rt/10;elsecnr;foriMAXc-1;i0;i 忽略前导 0 ifcibreak;forji;j0;jprintf“d“,cj;printf“n“;return 0; BASIC-28 Huffman 树/*问题描述Huffman 树在编码中有着广泛的应用。在这里,我们只关心 Huffman 树的构造过程。给出一列数pip0, p1, , pn-1,用这列数构造 Huffman 树的过程如下1. 找到pi中最小的两个数,设为 pa 和 pb,将 pa 和 pb 从pi中删除掉,然后将它们的和加入到pi中。这个过程的费用记为 pa pb。2. 重复步骤 1,直到pi中只剩下一个数。在上面的操作过程中,把所有的费用相加,就得到了构造 Huffman 树的总费用。本题任务对于给定的一个数列,现在请你求出用该数列构造 Huffman 树的总费用。例如,对于数列pi5, 3, 8, 2, 9,Huffman 树的构造过程如下1. 找到5, 3, 8, 2, 9中最小的两个数,分别是 2 和 3,从pi中删除它们并将和5 加入,得到5, 8, 9, 5,费用为 5。2. 找到5, 8, 9, 5中最小的两个数,分别是 5 和 5,从pi中删除它们并将和 10加入,得到8, 9, 10,费用为 10。3. 找到8, 9, 10中最小的两个数,分别是 8 和 9,从pi中删除它们并将和 17 加入,得到10, 17,费用为 17。4. 找到10, 17中最小的两个数,分别是 10 和 17,从pi中删除它们并将和 27 加入,得到27,费用为 27。5. 现在,数列中只剩下一个数 27,构造过程结束,总费用为 510172759。输入格式输入的第一行包含一个正整数 n(nincludeincludedefine MAX 105int mainint *a,n,i,j,k1,k2;int count0;scanf“d“,aint *malloc2*n-1*sizeofint;memseta,-1,sizeofa;fori0;iint mainchar a2120“zero“,“one“,“two“,“three“,“four“,“five“,“six“,“seven“,“eight“,“nine“,“ten“,“eleven“,“twelve“,“thirteen“,“fourteen“,“fifteen“,“sixteen“,“seventeen“,“eighteen“,“nineteen“,“twenty“;char b620,,“twenty“,“thirty“,“forty“,“fifty“;int m,h;scanf“dd“,ifm0ifhincludeint mainint a205205,b205205;int m,n,i,j,x1,y1,count0;scanf“dd“,memseta,-1,sizeofa;memsetb,-1,sizeofb;fori1;iint mainint v1,v2,t,s,l;int i,t10,t2,l10,l20;scanf“ddddd“,t2l/v2;fori1;itt1t1s;ifl1lelse ifl1lprintf“Rnd“,t1;elseprintf“Tnd“,t2;return 0;芯片测试/*问题描述有 n(2n20)块芯片,有好有坏,已知好芯片比坏芯片多。每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏。而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即此结果与被测试芯片实际的好坏无关)。给出所有芯片的测试结果,问哪些芯片是好芯片。输入格式输入数据第一行为一个整数 n,表示芯片个数。第二行到第 n1 行为 n*n 的一张表,每行 n 个数据。表中的每个数据为 0 或 1,在这n 行中的第 i 行第 j 列(1i, jn)的数据表示用第 i 块芯片测试第 j 块芯片时得到的测试结果,1 表示好,0 表示坏,ij 时一律为 1(并不表示该芯片对本身的测试结果。芯片不能对本身进行测试)。输出格式按从小到大的顺序输出所有好芯片的编号样例输入31 0 10 1 01 0 1样例输出1 3*/includeint mainint n,i,j,count;int a2525;scanf“d“,fori0;in/2printf“d “,j1; return 0;FJ 的字符串/*问题描述FJ 在沙盘上写了这样一些字符串A1 “A”A2 “ABA”A3 “ABACABA”A4 “ABACABADABACABA” 你能找出其中的规律并写所有的数列 AN 吗输入格式仅有一个数N 26。输出格式请输出相应的字符串 AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。样例输入3样例输出ABACABA*/includevoid fint kifk1fk-1;putcharAk-1;fk-1;int mainint n;scanf“d“,fn;return 0;Sine 之舞/*问题描述最近 FJ 为他的奶牛们开设了数学分析课,FJ 知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine 之舞”的游戏,寓教于乐,提高奶牛们的计算能力。不妨设Ansin1sin2sin3sin4.sinn.Sn.A1nA2n-1A3.2An1FJ 想让奶牛们计算 Sn 的值,请你帮助 FJ 打印出 Sn 的完整表达式,以方便奶牛们做题。输入格式仅有一个数Nvoid Anint nint i;fori1;iincludeint mainint i,j,l,n,k,sum0,flat1,c-1;char *a;scanf“d“,achar *mallocn*sizeofchar;scanf“s“,a;jn-1;利用贪心的思想,将每个遍历的字符找到后面与他相同的然后交换到正确的位置时所需的交换次数 fori0;ii;kifki 说明没有找到与 ai相同的字符 ifn20c-1 如果 n 为偶数或者 ai不是唯一一个单个无相同字符 flat0;break;c1; n 为奇数,将第一个单个的字符 ai移到中间位置所需的交换次数 sumsumn/2-i;break;ifakaiforlk;lusing namespace std;void multint a30,int b30,int c30,int N,int Mint i,j,k,p;forp1;pNM;fori0;iaij;fori0;iN;iforj0;jN;jbijaij;ifM0fori0;iN;iforj0;jN;jifijcij1;fori0;iN;iforj0;jN;jcoutcij“ “;coutendl;else ifM1fori0;iN;iforj0;jN;jcoutaij“ “;coutendl;else multa,b,c,N,M;fori0;iN;iforj0;jN;jcoutcij“ “;coutendl; return 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值