ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:33.97KB ,
资源ID:7973307      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7973307.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(高难度算法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

高难度算法.docx

1、高难度算法高难度算法 1、歌星大奖赛 在歌星大奖赛中,有 10个评委为参赛的选手打分,分数为 1-100分。选手最后得分为:去掉一个最高分和一个最低分后其余 8个分数的平均值。请编写一个程序实现。#include#include void main()int i,a,min=100,max=0,sum=0;float aver;for(i=0;ia)min=a;if(maxa)max=a;sum+=a;aver=(float)(sum-max-min)/8;printf(Cancled max score:%dnCancled min:score%dnAverage score:%4.2fn,

2、max,min,aver);2、高次方数的尾数 求 13的 13 次方的最后三位数。#include#include void main()int x,y,i,last=1;printf(Input X and Y(X*Y):);scanf(%d*%d,&x,&y);for(i=0;iy;i+)last=x*(last%1000);/取数的最后 3位,即用它整除 1000,得到余数 last=last%1000;/别忘了这里还要处理一下 printf(The last 3 digits of%d*%d is:%dn,x,y,last%1000);3、阶乘尾数零的个数 100!的尾数有多少个零?

3、#include#include void main()int a,count=0;for(a=5;a=100;a+=5)/循环从 5开始,以 5的倍数为步长,考察整数 +count;/若为 5 的倍数,计数器加 1 if(!(a%25)+count;/若为 25的倍数,计数器再加 1 printf(The number of 0 in the end of 100!is:%d.n,count);/打印结果 4、借书方案知多少 小明有五本新书,要借给 A,B,C 三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?#include#include void main()int a,b,

4、c,count=0;printf(There are diffrent methods for Xiao Ming to distribute books to 3 readers:n);for(a=1;a=5;a+)/穷举第一个人借 5本书中的 1本的全部情况 for(b=1;b=5;b+)/穷举第二个人借 5本书中的一本的全部情况 for(c=1;a!=b&c12)/判断输入数据是否超过 12 scanf(%d,&n);/控制输入正确的值以保证屏幕显示的图形正确 if(n12)printf(Input a integer less than 13,N=);for(i=0;i=n;i+)/控

5、制输出 N行 for(k=0;k24-2*i;k+)printf(+);/控制输出第 i 行前面的空格 for(j=1;ji+2;j+)printf(%4d,c(i,j);/输出第 i 行的值 printf(n);int c(int x,int y)/求杨辉三角形中第 x 行第 y列的值 int z;if(y=1)|(y=x+1)return 1;/若为 x 行的第 1 或第 x+1 列,则输出 1 else z=c(x-1,y-1)+c(x-1,y);/否则,其值为前一行中第 y-1 列与第 y列值之和 return z;6、打鱼还是晒网 中国有句俗语叫“三天打鱼两天晒网”。某人从 1990

6、 年 1月 1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。#include struct date int year;int month;int day;int days(struct date day);void main()struct date today,term;int yearday,year,day;printf(Enter year/month/day:);scanf(%d%d%d,&today.year,&today.month,&today.day);/输入日期 term.month=12;/设置变量的初始值:月 term.day=31;/

7、设置变量的初始值:日 for(yearday=0,year=1990;year0&day4)printf(He was fishing at that day.n);/打印结果 else printf(He was sunning his net at that day.n);int days(struct date day)static int day_tab213=0,31,28,31,30,31,30,31,31,30,31,30,31,/每月的天数 0,31,29,31,30,31,30,31,31,30,31,30,31,;int i,lp;lp=day.year%4=0&day.y

8、ear%100!=0|day.year%400=0;/判定 year 为闰年还是平年,lp=0为平年,非 0 为闰年 for(i=1;iday.month;i+)/计算本年中自 1 月 1日起的天数 day.day+=day_tablpi;return day.day;7、抓交通肇事犯 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。#include void main()int i,j,k,c;

9、for(i=1;i=9;i+)/i:车号前二位的取值 for(j=0;j=9;j+)/j:车号后二位的取值 if(i!=j)/判断二位数字是否相异 k=i*1000+i*100+j*10+j;/计算出可能的整数 for(c=31;c*ck;c+);/判断该数是否为另一整数的平方 if(c*c=k)printf(Lorry No.is%d.n,k);/若是,打印结果 8、该存多少钱 假设银行一年整存零取的月息为 0.63%。现在某人手中有一笔钱,他打算在今后的五年中的年底取出 1000 元,到第五年时刚好取完,请算出他存钱时应存入多少。#include void main()int i;doub

10、le saving=0;for(i=1;i=5;i+)/i 为年数,取值为 1-5 年 saving=(saving+1000)/(1+0.0063*12);/累计算出年初存款数额,第五次的计算结果即为题解 printf(He must save%.2f at first.n,saving);9、怎样存钱利最大 假设银行整存整取存款不同期限的月息利率分别为:0.63%期限=1 年 0.66%期限=2 年 0.69%期限=3 年 0.75%期限=5 年 0.84%期限=8 年 利息=本金*月息利率*12*存款年限。现在某人手中有 2000 元钱,请通过计算选择一种存钱方案,使得钱存入银行 20年

11、后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。#include#include void main()int i8,i5,i3,i2,i1,n8,n5,n3,n2,n1;double max=0,term;for(i8=0;i83;i8+)/4 个 for循环穷举所有可能的存款方式 for(i5=0;i5=(20-8*i8)/5;i5+)for(i3=0;i3=(20-8*i8-5*i5)/3;i3+)for(i2=0;i2max)max=term;n1=i1;n2=i2;n3=i3;n5=i5;n8=i8;printf(For maxinum profit,he shou

12、ld so save his money in a bank:n);printf(made fixed deposit for 8 year:%d timesn,n8);printf(made fixed deposit for 5 year:%d timesn,n5);printf(made fixed deposit for 3 year:%d timesn,n3);printf(made fixed deposit for 2 year:%d timesn,n2);printf(made fixed deposit for 1 year:%d timesn,n1);printf(Tota

13、l money:%.2f Yuan.n,max);10、捕鱼和分鱼 A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三竿,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。C、D、E 依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼?#include void main()int n,i,x,flag=1;/*flag:控制标记*/for(n=6;flag;n+)/*采用试探的方法。令试探值 n逐步加大*/for(x=n,i=1;flag&i=5;i+)i

14、f(x-1)%5=0)x=4*(x-1)/5;else flag=0;/*若不能分配则置标记 falg=0 退出分配过程*/if(flag)break;/*若分配过程正常结束则找到结果退出试探的过程*/else flag=1;/*否则继续试探下一个数*/printf(Total number of fish catched=%dn,n);/*输出结果*/11、出售金鱼 买买提将养的一缸金鱼分五次出售:第一次卖出全部的一半加二分之一条;第二次卖出余下的三分之一加三分之一条;第三次卖出余下的四分之一加四分之一条;第四次卖出余下的五分之一加五分之一条;最后卖出余下的 11 条。问原来的鱼缸中共有几条

15、金鱼?#include void main()int i,j,flag=0,x;/flag为标志变量 for(i=23;flag=0;i+=2)/控制试探的步长和过程 for(j=1,x=i;j=11;j+)/完成出售四次的操作,j 为卖的次数 if(x+1)%(j+1)=0)/若满足整除条件则进行实际的出售操作 x-=(x+1)/(j+1);else x=0;break;/否则停止计算过程,跳至上一层 for循环 if(j=5&x=11)/若第四次余下 11条则满足题意 printf(There are%d fishes at first.n,i);/输出结果 flag=1;/控制退出试探过

16、程 12、除不尽的自然数 一个自然数被 8除余 1,所得的商被 8除也余 1,再将第二次的商被 8除后余 7,最后得到一个商为 a。又知这个自然数被 17除余 4,所得的商被 17除余 15,最后得到一个商是 a的 2 倍。求这个自然数。#include void main()int i;for(i=0;i+)/*试探商的值*/if(i*8+7)*8+1)*8+1=(34*i+15)*17+4)printf(The required number is:%dn,(34*i+15)*17+4);break;13、一个奇异的三位数 一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是

17、一个三位数,且这两个三位数的数码正好相反,求这个三位数。#include void main()int i,j,k;/因为要交换位置,所以 i 和 k不能为 0 for(i=1;i7;i+)/穷举九进制的第一位数字 for(j=0;j7;j+)/穷举九进制的第二位数字 for(k=1;k7;k+)/穷举九进制的第三位数字 if(i*9*9+j*9+k=i+j*7+k*7*7)printf(The special number with 3 digits is:);printf(%d%d%d(7)=%d%d%d(9)=%d(10)n,k,j,i,i,j,k,i*9*9+j*9+k);14、4 位

18、反序数 设 N是一个四位数,它的 9 倍恰好是其反序数,求 N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是 4321。#include void main()int i;for(i=1002;i1111;i+)/初始值不必设为 1000 或 1001,因为 1000 个位是 0,1001的反序数还是 1001。/判断条件设为 1111 的理由是 1112*9=10008,是个五位数。if(i%10*1000+i/10%10*100+i/100%10*10+i/1000=i*9)/*判断反序数是否是原数的 9 倍*/printf(The number satisfied s

19、tats condition is:%dn,i);15、求车速(08年高考题)一辆以固定速度行驶的汽车,司机在上午 10 点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为 95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?#include void main()int t,a5;/数组 a5存放分解的数字位 long int k,i;for(i=95860;i+)/以 95860为初值,循环试探 for(t=0,k=100000;k=10;t+)/从高位到低位分解 i 的每位数字,依次存放于 a0-a5中 at=(i%k)

20、/(k/10);k/=10;if(a0=a4)&(a1=a3)printf(The new symmetrical number kelometers is:%d%d%d%d%dn,a0,a1,a2,a3,a4);printf(The velocity of the car is:%.2fn,(i-95859)/2.0);break;16、由两个平方三位数获得三个平方二位数 已知两个平方三位数 abc和 xyz,其中 a、b、c、x、y、z 未必是不同的;而 ax、by、cz 是三个平方二位数。请编程求三位数 abc和 xyz。#include#include void main()void

21、f(int n,int*s);int i,t;int a3,b3;printf(The possible perfect squares combinations are:n);for(i=10;i=31;+i)/穷举平方三位数的取值范围 for(t=10;t=10)&/检验新构成的数是否是两位数,是否是平方数 (a1*10+b1=10)&(a2*10+b2=10)&sqrt(a0*10+b0)=(int)sqrt(a0*10+b0)&sqrt(a1*10+b1)=(int)sqrt(a1*10+b1)&sqrt(a2*10+b2)=(int)sqrt(a2*10+b2)printf(%d a

22、nd%d.n,i*i,t*t);17、亲密数 如果整数 A的全部因子(包括 1,不包括 A本身)之和等于 B;且整数 B的全部因子(包括 1,不包括 B本身)之和等于 A,则将整数 A和 B称为亲密数。求 3000以内的全部亲密数。#include void main()printf(There are following friendlynumbers pair smaller than 3000:n);int a,b,i,t;for(a=1;a=3000;a+)/穷举 3000 以内的全部整数 b=0;for(i=1;i=a/2;i+)/计算 a的因子,并将各因子依次累加于 b中 if(!

23、(a%i)b=b+i;t=0;for(i=1;ia)printf(%4d.%-4dn,a,b);/若 a与 b不同,且 t=a,则 a与b 一对亲密数,输出 18、自守数 自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25*25=625 76*76=5776 9376*9376=87909376 请求出 200000以内的自守数。#include void main()int i,j,k,l;for(i=0;i0;k-)l=10*l;if(i=(i*i)%l)printf(%5d,i);printf(n);19、回文数 打印所有不超过 n(取 n256)的其平方具有对称性质的数(也称

24、回文数)。#include void main()int i,n,a,m16,k,count=0,t;printf(No.number its square(palindrome)n);for(n=1;n=1;i-)k+=mi-1*t;t=t*10;if(k=n*n)printf(%2d%12d%12dn,+count,n,n*n);20、求具有 abcd=(ab+cd)*(ab+cd)性质的四位数 3025这个数具有一种独特的性质:将它平分为二段,即 30和 25,使之相加后求平方,即(30+25)2,恰好等于 3025本身。请求出具有这样性质的全部四位数。#include void mai

25、n()int n,a,b;printf(There are following number with 4 digits satisfied conditionn);for(n=1000;n=9999;n+)/四位数 N的取值范围 1000-9999 a=n/100;/截取 N 的前两位数存于 a b=n%100;/截取 N的后两位存于 b if(n=(a+b)*(a+b)printf(%dn,n);/判断 n是否为符合题目所规定的性质的四位数,如果是,输出 21、可逆素数 求四位的可逆素数。可逆素数指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。22、回文素数 求不超过 1000的

26、回文素数。23、马克思手稿中的数学题 马克思手稿中有一道趣味数学问题:有 30 个人,其中有男人、女人和小孩,在一家饭馆吃饭花了 50先令;每个男人花 3先令,每个女人花 2先令,每个小孩花 1先令;问男人、女人和小孩各有几人?#include void main()int x,y,z,count=0;printf(Men Women Childrenn);printf(n);for(x=0;x=10;x+)y=20-2*x;/x 定值据(3)式求 y z=30-x-y;/由(1)式求得 if(3*x+2*y+z=50)/当前得到的一组解是否满足式(2)printf(%2d:%2d%6d%7d

27、n,+count,x,y,z);24、新娘和新郞 三对情侣参加婚礼,三个新郞为 A、B、C,三个新娘为 X、Y、Z。有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:A 说他将和 X结婚;X说她的未婚夫是 C;C 说他将和 Z结婚。这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。#include void main()int x,y,z;for(x=1;x=3;x+)/穷举 x 的全部可能配偶 for(y=1;y=3;y+)/穷举 y的全部可能配偶 for(z=1;z=3;z+)/穷举 z 的全部可能配偶 if(x!=1&x!=3&z!=3&x!=y&x!=z

28、&y!=z)/判断配偶是否满足题意 printf(X will marry to%c.n,A+x-1);/打印判断结果 printf(Y will marry to%c.n,A+y-1);printf(Z will marry to%c.n,A+z-1);25、委派任务 某侦察队接到一项紧急任务,要求在 A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:1)A和 B两人中至少去一人;2)A和 D不能一起去;3)A、E和 F三人中要派两人去;4)B和 C 都去或都不去;5)C和 D两人中去一个;6)若 D不去,则 E 也不去。问应当让哪几个人去?#include void m

29、ain()int a,b,c,d,e,f;for(a=1;a=0;a-)/穷举每个人是否去的所有情况 for(b=1;b=0;b-)/1:去 0:不去*/for(c=1;c=0;c-)for(d=1;d=0;d-)for(e=1;e=0;e-)for(f=1;f=0;f-)if(a+b=1&a+d!=2&a+e+f=2&(b+c=0|b+c=2)&c+d=1&(d+e=0|d=1)printf(A will%s be assigned.n,a?:not);printf(B will%s be assigned.n,b?:not);printf(C will%s be assigned.n,c?

30、:not);printf(D will%s be assigned.n,d?:not);printf(E will%s be assigned.n,e?:not);printf(F will%s be assigned.n,f?:not);26、谁在说谎 张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。现在问:这三人中到底谁说的是真话,谁说的是假话?#include void main()int a,b,c;for(a=0;a=1;a+)for(b=0;b=1;b+)for(c=0;c=1;c+)if(a&!b|!a&b)&(b&!c|!b&c)&(c&a+b=0|!c&a+b!

31、=0)printf(Zhangsan told a%s.n,a?truth:lie);printf(Lisi told a%s.n,b?truch:lie);printf(Wangwu told a%s.n,c?truch:lie);27、谁是窃贼 公安人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中:甲说:“乙没有偷,是丁偷的。”乙说:“我没有偷,是丙偷的。”丙说:“甲没有偷,是乙偷的。”丁说:“我没有偷。”请根据这四人的答话判断谁是盗窃者。#include void main()int i,j,a4;for(i=

32、0;i4;i+)/假定只有第 i 个人为窃贼 for(j=0;j4;j+)/在第 i 轮假设中,假设第 i 个人为窃贼,把 ai设为 1,其余为 0 if(j=i)aj=1;else aj=0;if(a3+a1=1&a1+a2=1&a0+a1=1)/判断条件是否成立 printf(The thief is);/成立 for(j=0;j=3;j+)/输出计算结果 if(aj)printf(%c.,j+A);printf(n);28、黑与白 有 A、B、C、D、E五人,每人额头上都贴了一张黑或白的纸。五人对坐,每人都可以看到其它人额头上的纸的颜色。五人相互观察后,A说:“我看见有三人额头上贴的是白

33、纸,一人额头上贴的是黑纸。”B说:“我看见其它四人额头上贴的都是黑纸。”C 说:“我看见一人额头上贴的是白纸,其它三人额头上贴的是黑纸。”D说:“我看见四人额头上贴的都是白纸。”E什么也没说。现在已知额头上贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。问这五人谁的额头是贴白纸,谁的额头是贴黑纸?#include void main()int a,b,c,d,e;for(a=0;a=1;a+)/黑色:0 白色:1 for(b=0;b=1;b+)/穷举五个人额头贴纸的全部可能 for(c=0;c=1;c+)for(d=0;d=1;d+)for(e=0;e=1;e+)if(a&b+c+d+e=3|!a&b+c+d+e!=3)&(b&a+c+d+e=0|!b&a+c+d+e!=0)&(c&a+b+d+e=1|!c&a+b+d+e!=1)&(d&a+b+c+e=4|!d&a+b+c+e!=4)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1