XXXX程序设计竞赛选拔赛

上传人:s9****2 文档编号:488987306 上传时间:2023-06-06 格式:DOC 页数:15 大小:88.50KB
返回 下载 相关 举报
XXXX程序设计竞赛选拔赛_第1页
第1页 / 共15页
XXXX程序设计竞赛选拔赛_第2页
第2页 / 共15页
XXXX程序设计竞赛选拔赛_第3页
第3页 / 共15页
XXXX程序设计竞赛选拔赛_第4页
第4页 / 共15页
XXXX程序设计竞赛选拔赛_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《XXXX程序设计竞赛选拔赛》由会员分享,可在线阅读,更多相关《XXXX程序设计竞赛选拔赛(15页珍藏版)》请在金锄头文库上搜索。

1、XXXX程序设计竞赛选拔赛1、排列数由1个“ 1” ,2个“2” ,k个“3” (1 k 6)能组成多少个不同的排列? 输入k,输出排列个数。k=4,输出:k=5,输出:(1) 设计要点注意到1个“ 1” ,2个“2” ,k个“3”组成k+3位数,第一通过k+2个 10相乘运算k+3位数的起点b=10A(k+2),为枚举提供范畴t(b4*b-1)。为了检测k+3位数t含有多少个数字1、2、3,每个k+3位整数t赋给 d(以保持t不变),然后通过k+3次求余先后分离出t的k+3个数字c:if(c=1) f+,统计整数t中数字1的个数f ;if(c=2) g+,统计整数t中数字2的个数g;if(c

2、=3) h+,统计整数t中数字3的个数h。检测每一个k+3位整数:若f=1 and g=2 and h=k,则应用s进行统计。 最后输出所得排列个数s。(2) 程序设计/排列数#i nclude void main() int c,f,g,h,i,j,k;long b,d,s,t;printf(请输入数字 3 的个数 k (1 k 6): ); scanf(%d,&k);b=1; s=0;for(i=1;i=k+2;i+) b=b*10; II 运算 k+3 位数的起点for(t二b;tv=4*b-1;t+)/ 枚举首位为 3 的 k+3 位数 d=t;f=O;g=O;h=O;for(j=1;

3、j=k+3;j+)c=d%10; d=d/10;if(c=1)f+;/统计数字1的个数if(c=2)g+;/统计数字2的个数if(c=3)h+;/统计数字3的个数if(f=1 & g=2 & h=k) s+;/ 统计个数 sprintf(s=%ld n,s);(3) 程序运行示例请输入数字3的个数k (1 k 6): 4s=105请输入数字3的个数k (1 k 6): 5s=168(4) 拓广若需求k=100时的排列数,如何求?1) 注意到一排k个“3”的空位共k+1个。这k+1个选2个空位共C(k+1,2)种组合,每一空位放置1个“ 2”这k+1个选1个空位共C(k+1,1)种组合,空位中放

4、置2个“2”。2) 注意到一排k个“3”与2个“2”的空位共k+3个。这k+3个选1个空位共C(k+3,1)种组合,空位中放置1个“1”。3) 因而得不同的排列数为:(C(k+1,2)+C(k+1,1)*C(k+3,1)=(k+1)*(k+2)*(k+3)/2/排列数#i nclude void main() int k;long s;printf(”请输入数字 3 的个数 k: ); seanf(%d,&k);s=(k+1)*(k+2)*(k+3)/2;prin tf(s=%ld n ,s);请输入数字3的个数k: 100s=530553(5) 实训1运算由2个“ 1”、2个“2”、k个“3

5、”的排列数。运算由3个“ 1”、2个“2”、k个“3”的排列数。测试数据:k=502、求最值设n为正整数,s(n) 1111,式中各项符号为二11/211/2 1/31 1/21/n正一负。求当n为多大时,s(n)最接近指定的正整数a?输入a,输出s(n)最接近a的n,s(n)。(1) 输入1000输出:(2) 输入2011输出:解:一样地求当n为多大时,s(n)最接近正整数a?其中a从键盘输入a。/ s(n)=1+1/(1+1/2)-1/(1+1/2+1/3)+.+1/(1+1/2+.+1/n)#i nclude #in cludevoid main() long a,n,n1;double

6、 m,ts,s,s1;printf( 请输入 a: ); scanf(%d,&a);while(sa+10) n=n+1;ts=ts+(double)1/ n;if(n %3=0)s=s-1/ts;elses=s+1/ts;if(fabs(s-a)z。为幸免重复,不妨设xyz。在指定区间a,b上按照x,y,z的大小关系设置循环:z从a至b-2,y从z+1 至 b-1,x 从 y+1 至 bo对每一组x,y,z,如果直截了当应用条件式1/(x*x)+1/(y*y)=1/(z*z)作判不,因分数运算的不可幸免的误差,有可能把一些成立的倒立勾 股数组解遗失,?即造成遗漏。注意到上述分数条件式作通分整

7、理得到的下面的正整数条件式z*z*(x*x+y*y)=x*x*y*y程序中为防止发生解的遗漏,应用上述整数条件作判不是适宜的。(2) 求区间内倒立勾股数程序设计/求指定区间内倒立勾股数组#i nclude #in clude void main()int a,b,n; long x,y,z;printf(”求指定区间a,b内倒立的勾股数组.);printf(n请输入区间a,b的上下限a,b:);sca nf(%d,%d,&a,&b);printf(n区间%d,%d中倒立的勾股数组有:n,a,b);n=0;for(z二a;z二b-2;z+)for(y二z+1;y二b-1;y+)for(x=y+1

8、;x=b;x+)if(z*z*(x*x+y*y)=x*x*y*y)/满足倒立勾股数条件时输出n+;printf( 1/%ldA2+1/%ldA2=1/%ldA2 n,x,y,z);printf(共%d 组勾股数.,n);(3) 程序运行示例区间30,100中倒立的勾股数组有:1/60八2+1/45八2=1/36八21/80八2+1/60八2=1/48八21/100八2+1/75八2=1/60八2共3组勾股数.区间100,200中倒立的勾股数组有:1/180八2+1/135八2=1/108八21/200八2+1/150八2=1/120八2共2组勾股数.4、双和数组寻求6个互不相等的正整数a,b,

9、c,d,e,f并分成(a,b,c)与(d,e,f)两个组,若 这两组数具有以下两个相等特性:a b c d e f则把数组b(a,b,c)与(d,e,ff)称为双和数组(约定abc,def,a11。设置a,b与d,e循环。注意到a+b+c=s,且aba,因而d起点为a+1。把比较倒数和相等1/a+1/b+1/c= 1/d+1/e+1/f转化为比较整数相等 d*e*f*(b*c+c*a+a*b)=a*b*c*(e*f+f*d+d*e)(*)若上式不成立,即倒数和不相等,则返回。同时注意到两个3元组中若部分相同部分不同,不能有倒数和相等, 因而可省略排除以上6个正整数中是否存在相等的检测。若式(*

10、)成立,打印输出和为s的双和数组,并用x统计解的个数。(2) C程序设计/双和数组探究#in clude#in cludevoid main()int a,b,c,d,e,f,x,s;for(s=21;s=100;s+)printf( s=%d: n,s);x=0;for(a=1;a=(s-3)/3;a+)for(b=a+1;b=(s-a-1)/2;b+)for(d=a+1;d=(s-3)/3;d+)for(e=d+1;e=(s-d-1)/2;e+)c=s-a-b; f=s-d-e;if(a*b*c*(e*f+f*d+d*e)!二d*e*f*(b*c+c*a+a*b)continue;/排除倒

11、数和不相等x+;printf(%3d: (%2d,%2d,%2d) ,x,a,b,c);prin tf(%2d,%2d,%2d)n,d,e,f);if(x=0) printf(”无解! n”);(3) 程序运行结果与讨论s=26:1:(4,10,12)(5, 6,15)s=98:1:(2,36,60)(3, 5,90)2:(7,28,63)(8,18,72)3:(7,35,56)(8,20,70)4:(10,33,55)(12,20,66)(4) 实训3寻求6个互不相等的正整数a,b,c,d,e,f并分成(a,b,c)与(d,e,f)两个组,若 这两组数具有以下两个相等特性:a b c d e fa b c def则把数组(a,b,c)与(d,e,f)称为和积数组(约定abc,def,ad) o1) 设a+b+c=d+e+f=s,存在和积数组,s至少为多大?2) 当s=89时有多少个不同的和积数组?5、m位完美平方数用0,1,2,,9能组成多少个没有重复数字的 m(1mw 10)位平方数? 输入m,输出没有重复数字的m位平方数的个数,并输出其中最大的。m=7,输出:m=10,输出:用0,1,2,9组成没有重复数字的m位平方数#in elude #i nclude void main()int k,m,n,t,f10;double

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号