高难度算法Word下载.docx
- 文档编号:21109555
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:38
- 大小:33.97KB
高难度算法Word下载.docx
《高难度算法Word下载.docx》由会员分享,可在线阅读,更多相关《高难度算法Word下载.docx(38页珍藏版)》请在冰豆网上搜索。
a+)/穷举第一个人借5本书中的1本的全部情况for(b=1;
b=5;
b+)/穷举第二个人借5本书中的一本的全部情况for(c=1;
a!
=b&
c12)/判断输入数据是否超过12scanf(%d,&
/控制输入正确的值以保证屏幕显示的图形正确if(n12)printf(Inputaintegerlessthan13,N=);
i=n;
i+)/控制输出N行for(k=0;
k24-2*i;
k+)printf(+);
/控制输出第i行前面的空格for(j=1;
ji+2;
j+)printf(%4d,c(i,j);
/输出第i行的值printf(n);
intc(intx,inty)/求杨辉三角形中第x行第y列的值intz;
if(y=1)|(y=x+1)return1;
/若为x行的第1或第x+1列,则输出1elsez=c(x-1,y-1)+c(x-1,y);
/否则,其值为前一行中第y-1列与第y列值之和returnz;
6、打鱼还是晒网中国有句俗语叫“三天打鱼两天晒网”。
某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
#includestructdateintyear;
intmonth;
intday;
intdays(structdateday);
voidmain()structdatetoday,term;
intyearday,year,day;
printf(Enteryear/month/day:
scanf(%d%d%d,&
today.year,&
today.month,&
today.day);
/输入日期term.month=12;
/设置变量的初始值:
月term.day=31;
日for(yearday=0,year=1990;
year0&
day4)printf(Hewasfishingatthatday.n);
/打印结果elseprintf(Hewassunninghisnetatthatday.n);
intdays(structdateday)staticintday_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,;
inti,lp;
lp=day.year%4=0&
day.year%100!
=0|day.year%400=0;
/判定year为闰年还是平年,lp=0为平年,非0为闰年for(i=1;
iday.month;
i+)/计算本年中自1月1日起的天数day.day+=day_tablpi;
returnday.day;
7、抓交通肇事犯一辆卡车违反交通规则,撞人后逃跑。
现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。
甲说:
牌照的前两位数字是相同的;
乙说:
牌照的后两位数字是相同的,但与前两位不同;
丙是数学家,他说:
四位的车号刚好是一个整数的平方。
请根据以上线索求出车号。
#includevoidmain()inti,j,k,c;
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(LorryNo.is%d.n,k);
/若是,打印结果8、该存多少钱假设银行一年整存零取的月息为0.63%。
现在某人手中有一笔钱,他打算在今后的五年中的年底取出1000元,到第五年时刚好取完,请算出他存钱时应存入多少。
#includevoidmain()inti;
doublesaving=0;
i=5;
i+)/i为年数,取值为1-5年saving=(saving+1000)/(1+0.0063*12);
/累计算出年初存款数额,第五次的计算结果即为题解printf(Hemustsave%.2fatfirst.n,saving);
9、怎样存钱利最大假设银行整存整取存款不同期限的月息利率分别为:
0.63%期限=1年0.66%期限=2年0.69%期限=3年0.75%期限=5年0.84%期限=8年利息=本金*月息利率*12*存款年限。
现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。
#include#includevoidmain()inti8,i5,i3,i2,i1,n8,n5,n3,n2,n1;
doublemax=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(Formaxinumprofit,heshouldsosavehismoneyinabank:
printf(madefixeddepositfor8year:
%dtimesn,n8);
printf(madefixeddepositfor5year:
%dtimesn,n5);
printf(madefixeddepositfor3year:
%dtimesn,n3);
printf(madefixeddepositfor2year:
%dtimesn,n2);
printf(madefixeddepositfor1year:
%dtimesn,n1);
printf(Totalmoney:
%.2fYuan.n,max);
10、捕鱼和分鱼A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三竿,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。
B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。
C、D、E依次醒来,也按同样的方法拿走鱼。
问他们合伙至少捕了多少条鱼?
#includevoidmain()intn,i,x,flag=1;
/*flag:
控制标记*/for(n=6;
flag;
n+)/*采用试探的方法。
令试探值n逐步加大*/for(x=n,i=1;
flag&
i+)if(x-1)%5=0)x=4*(x-1)/5;
elseflag=0;
/*若不能分配则置标记falg=0退出分配过程*/if(flag)break;
/*若分配过程正常结束则找到结果退出试探的过程*/elseflag=1;
/*否则继续试探下一个数*/printf(Totalnumberoffishcatched=%dn,n);
/*输出结果*/11、出售金鱼买买提将养的一缸金鱼分五次出售:
第一次卖出全部的一半加二分之一条;
第二次卖出余下的三分之一加三分之一条;
第三次卖出余下的四分之一加四分之一条;
第四次卖出余下的五分之一加五分之一条;
最后卖出余下的11条。
问原来的鱼缸中共有几条金鱼?
#includevoidmain()inti,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);
elsex=0;
break;
/否则停止计算过程,跳至上一层for循环if(j=5&
x=11)/若第四次余下11条则满足题意printf(Thereare%dfishesatfirst.n,i);
/输出结果flag=1;
/控制退出试探过程12、除不尽的自然数一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。
又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。
求这个自然数。
i+)/*试探商的值*/if(i*8+7)*8+1)*8+1=(34*i+15)*17+4)printf(Therequirednumberis:
%dn,(34*i+15)*17+4);
13、一个奇异的三位数一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码正好相反,求这个三位数。
#includevoidmain()inti,j,k;
/因为要交换位置,所以i和k不能为0for(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(Thespecialnumberwith3digitsis:
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位反序数设N是一个四位数,它的9倍恰好是其反序数,求N。
反序数就是将整数的数字倒过来形成的整数。
例如:
1234的反序数是4321。
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(Thenumbersatisfiedstatsconditionis:
%dn,i);
15、求车速(08年高考题)一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。
两小时后里程表上出现了一个新的对称数。
问该车的速度是多少?
新的对称数是多少?
#includevoidmain()intt,a5;
/数组a5存放分解的数字位longintk,i;
for(i=95860;
i+)/以95860为初值,循环试探for(t=0,k=100000;
k=10;
t+)/从高位到低位分解i的每位数字,依次存放于a0-a5中at=(i%k)/(k/10);
k/=10;
if(a0=a4)&
(a1=a3)printf(Thenewsymmetricalnumberkelometersis:
%d%d%d%d%dn,a0,a1,a2,a3,a4);
printf(Thevelocityofthecaris:
%.2fn,(i-95859)/2.0);
16、由两个平方三位数获得三个平方二位数已知两个平方三位数abc和xyz,其中a、b、c、x、y、z未必是不同的;
而ax、by、cz是三个平方二位数。
请编程求三位数abc和xyz。
#include#includevoidmain()voidf(intn,int*s);
inti,t;
inta3,b3;
printf(Thepossibleperfectsquarescombinationsare:
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(%dand%d.n,i*i,t*t);
17、亲密数如果整数A的全部因子(包括1,不包括A本身)之和等于B;
且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
求3000以内的全部亲密数。
#includevoidmain()printf(Therearefollowingfriendlynumberspairsmallerthan3000:
inta,b,i,t;
a=3000;
a+)/穷举3000以内的全部整数b=0;
i=a/2;
i+)/计算a的因子,并将各因子依次累加于b中if(!
(a%i)b=b+i;
t=0;
ia)printf(%4d.%-4dn,a,b);
/若a与b不同,且t=a,则a与b一对亲密数,输出18、自守数自守数是指一个数的平方的尾数等于该数自身的自然数。
25*25=62576*76=57769376*9376=87909376请求出200000以内的自守数。
#includevoidmain()inti,j,k,l;
i0;
k-)l=10*l;
if(i=(i*i)%l)printf(%5d,i);
printf(n);
19、回文数打印所有不超过n(取n256)的其平方具有对称性质的数(也称回文数)。
#includevoidmain()inti,n,a,m16,k,count=0,t;
printf(No.numberitssquare(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本身。
请求出具有这样性质的全部四位数。
#includevoidmain()intn,a,b;
printf(Therearefollowingnumberwith4digitssatisfiedconditionn);
for(n=1000;
n=9999;
n+)/四位数N的取值范围1000-9999a=n/100;
/截取N的前两位数存于ab=n%100;
/截取N的后两位存于bif(n=(a+b)*(a+b)printf(%dn,n);
/判断n是否为符合题目所规定的性质的四位数,如果是,输出21、可逆素数求四位的可逆素数。
可逆素数指:
一个素数将其各位数字的顺序倒过来构成的反序数也是素数。
22、回文素数求不超过1000的回文素数。
23、马克思手稿中的数学题马克思手稿中有一道趣味数学问题:
有30个人,其中有男人、女人和小孩,在一家饭馆吃饭花了50先令;
每个男人花3先令,每个女人花2先令,每个小孩花1先令;
问男人、女人和小孩各有几人?
#includevoidmain()intx,y,z,count=0;
printf(MenWomenChildrenn);
for(x=0;
x=10;
x+)y=20-2*x;
/x定值据(3)式求yz=30-x-y;
/由
(1)式求得if(3*x+2*y+z=50)/当前得到的一组解是否满足式
(2)printf(%2d:
%2d%6d%7dn,+count,x,y,z);
24、新娘和新郞三对情侣参加婚礼,三个新郞为A、B、C,三个新娘为X、Y、Z。
有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:
A说他将和X结婚;
X说她的未婚夫是C;
C说他将和Z结婚。
这人听后知道他们在开玩笑,全是假话。
请编程找出谁将和谁结婚。
#includevoidmain()intx,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!
=y&
=z&
y!
=z)/判断配偶是否满足题意printf(Xwillmarryto%c.n,A+x-1);
/打印判断结果printf(Ywillmarryto%c.n,A+y-1);
printf(Zwillmarryto%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也不去。
问应当让哪几个人去?
#includevoidmain()inta,b,c,d,e,f;
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(Awill%sbeassigned.n,a?
:
not);
printf(Bwill%sbeassigned.n,b?
printf(Cwill%sbeassigned.n,c?
printf(Dwill%sbeassigned.n,d?
printf(Ewill%sbeassigned.n,e?
printf(Fwill%sbeassigned.n,f?
26、谁在说谎张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。
现在问:
这三人中到底谁说的是真话,谁说的是假话?
#includevoidmain()inta,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!
=0)printf(Zhangsantolda%s.n,a?
truth:
lie);
printf(Lisitolda%s.n,b?
truch:
printf(Wangwutolda%s.n,c?
27、谁是窃贼公安人员审问四名窃贼嫌疑犯。
已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。
在回答公安人员的问题中:
“乙没有偷,是丁偷的。
”乙说:
“我没有偷,是丙偷的。
”丙说:
“甲没有偷,是乙偷的。
”丁说:
“我没有偷。
”请根据这四人的答话判断谁是盗窃者。
#includevoidmain()inti,j,a4;
i4;
i+)/假定只有第i个人为窃贼for(j=0;
j4;
j+)/在第i轮假设中,假设第i个人为窃贼,把ai设为1,其余为0if(j=i)aj=1;
elseaj=0;
if(a3+a1=1&
a1+a2=1&
a0+a1=1)/判断条件是否成立printf(Thethiefis);
/成立for(j=0;
j=3;
j+)/输出计算结果if(aj)printf(%c.,j+A);
28、黑与白有A、B、C、D、E五人,每人额头上都贴了一张黑或白的纸。
五人对坐,每人都可以看到其它人额头上的纸的颜色。
五人相互观察后,A说:
“我看见有三人额头上贴的是白纸,一人额头上贴的是黑纸。
”B说:
“我看见其它四人额头上贴的都是黑纸。
”C说:
“我看见一人额头上贴的是白纸,其它三人额头上贴的是黑纸。
”D说:
“我看见四人额头上贴的都是白纸。
”E什么也没说。
现在已知额头上贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。
问这五人谁的额头是贴白纸,谁的额头是贴黑纸?
#includevoidmain()inta,b,c,d,e;
a+)/黑色:
0白色:
1for(b=0;
b+)/穷举五个人额头贴纸的全部可能for(c=0;
c+)for(d=0;
d=1;
d+)for(e=0;
e=1;
e+)if(a&
b+c+d+e=3|!
b+c+d+e!
=3)&
a+c+d+e=0|!
a+c+d+e!
=0)&
a+b+d+e=1|!
a+b+d+e!
=1)&
(d&
a+b+c+e=4|!
d&
a+b+c+e!
=4)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 难度 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)