《蓝桥杯试题答案(练习)(共12页).doc》由会员分享,可在线阅读,更多相关《蓝桥杯试题答案(练习)(共12页).doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上1、亲密数:假设有a、b两个数,若a的所有因子之和等于b,b的所有因子之和等于a,并且a不等于b,则称a和b是一对亲密数。如284和220就是一对亲密数。#includeint main()int a,b,i,n;for(a=1;a=10000;a+)for(b=0,i=1;i=a/2;i+)if(a%i=0)b+=i;for(n=0,i=1;i=b/2;i+)if(b%i=0)n+=i;if(n=a&a!=b&ab)printf(%d-%dn,a,b);return 0;2、世纪末的星期: 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称
2、今后的某个世纪末的12月31日如果是星期一则会. 有趣的是 任何一个世纪末的年份的12月31日都不可能是星期一! 于是 “谣言制造商”又修改为星期日. 1999年的12月31日是星期五,请问,未来哪一个离我们最近的一个世纪末年即xx99年的12月31日正好是星期天,即星期日 请回答该年份,只写这个4位整数,不要写12月31等多余信息#includeint main()long days = 5; /*1999年的最后一天为周5,把下一年加上5天对7取余为0的,则是周日*/ int i = 2000; for(;) /*无循环终止条件,可以利用break语句终止循环*/if(i%4=0&i%10
3、0!=0|i%400=0) days = days%7+366; else days = days%7+365; if(days%7=0&i%100=99) printf(%d,i); break; i+; return 0; 3、马虎的算式: 小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。 有一次老师出的题目是36 x 495 = ? 他却给抄成了396 x 45 = ? 但结果却很戏剧性他的答案竟然是对的 因为 36 * 495 = 396 * 45 = 17820 类似这样的巧合情况可能还有很多,比如27 * 594 = 297 * 54 假设 a b c d e 代表1
4、9不同的5个数字,注意是各不相同的数字且不含0 能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢 请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。 满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。 答案直接通过浏览器提交。 注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。 #includeint main()int n,m,i=0;for(int a=1;a10;a+)for(int b=1;b10;b+)for(int c=1;c10;c+)for(int d=1;d10;d+)for(int e=1;e10;e
5、+)n=(a*10+b)*(c*100+d*10+e);m=(a*100+d*10+b)*(c*10+e);if(n=m&a!=b&a!=c&a!=d&a!=e&b!=c&b!=d&b!=e&c!=d&c!=e&d!=e)i+; printf(%d,i);return 0;一、啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。 注意:答案是一个整数。请通过浏览器提交答案。不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。#includeint main()int i,j;for
6、(i=1;i36;i+) for(j=1;j44;j+) if(i*2.3+j*1.9=82.3)&(ij) printf(%d %dn,i,j); return 0; 二、高斯日记大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。高斯获得博士学位
7、的那天日记上标着:8113 请你算出高斯获得博士学位的年月日。提交答案的格式是:1799-07-16,例如:1980-03-21请严格按照格式,通过浏览器提交答案。注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。#includeint main()int year=1777,month=4,day=30;int a=0,31,28,31,30,31,30,31,31,30,31,30,31;for(int i=1;i8113;i+)if(2=month&year%4=0&year%100!=0|year%400=0) a2=29;else a2=28;day=day%amonth
8、+1; if(day=1) month=month%12+1;if(month=1)year+; printf(%d-%d-%d,year,month,day);return 0;三、排它平方数小明正看着 这个数字发呆。 原来, * = 这有什么神奇呢?仔细观察, 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。具有这样特点的6位数还有一个,请你找出它!再归纳一下筛选要求:1. 6位正整数2. 每个数位上的数字不同3. 其平方数的每个数位不含原数字的任何组成数位答案是一个6位的正整数。请通过浏览器提交答案。注意:只提交另一6位数,题中已经给出的
9、这个不要提交。注意:不要书写其它的内容(比如:说明性的文字)。#include#includeint judge(int n) int num = n; int vis10; memset(vis, 0, sizeof(vis); /*#include 常用于数组的初始化, 将它的所有元素初始化为0 memset(f 数组名,0 要赋予的值 ,sizeof(f) 数组元素个数)*/ while(num) int tmp = num % 10; num /= 10; if(vistmp) return 0; vistmp = 1; long long n1 = (long long)n * n;
10、 while(n1) int tmp = n1 % 10; n1 /= 10; if(vistmp) return 0; return 1; int main() int i; for(i = ; i = ; i+) if(judge(i) printf(%dn,i); return 0; 五、换分币 用一元人民币兑换成1分、2分和5分硬币,共有多少种不同的兑换方法。#includeint main()int a,b,c,i=0;for(a=1;a=100;a+) for(b=0;b=50;b+) for(c=1;c=20;c+) if(a*1+b*2+c*5=100) i+; printf(
11、%d,i); getch(); return 0; (待看)标题:三部排序 一般的排序有许多经典算法,如快速排序、希尔排序等。 但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立好的解法。 比如,对一个整型数组中的数字进行分类排序: 使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗! 以下的程序实现了该目标。 其中x指向待排序的整型数组,len是数组的长度。#include void sort3p(int* x, int len)int p = 0;int lef
12、t = 0;int right = len-1;while(p=right)if(xp0)int t = xright;xright = xp;xp = t;right-;elsep+; /*填空*/int main(int argc, char* argv)int a=25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0;sort3p(a,14);for(int i=0;i14;i+)printf(%d ,ai);printf(n);return 0;七、古堡算式福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:“ABC
13、DE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把 ABCDE 所代表的数字写出来。答案写在“解答.txt”中,不要写在这里!#includeint main()int i; for(i=10000;i;i+) int a = i/10000; int b = i%10000/1000; int c = i%10000%1000/100; int d = i%10000%1000%100/10; int e = i%10; if(a=b|a=c|a=d|a=e|b=c|b=d|b=e|c=d|c=e|d=e) continue; int y = e*10000+d*1000+c*100+b*10+a; if(y%i=0) printf(%d*%d=%d,i,y/i,y); 专心-专注-专业