2012程序设计竞赛基础实训31_第1页
2012程序设计竞赛基础实训31_第2页
2012程序设计竞赛基础实训31_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2012年程序设计(chénɡxùshèjì)竞赛(jìngsài)基础(jīchǔ)实训311统计(tǒngjì)试统计含有数字(shùzì)77整除的ms1s14s2。输入m,输出s1,s2。m=5,输出:m=6,输出:设计要点m-110mb=10^(m-1),为枚举提供范围t(b—10*b-1)。mt7mtd(以保持t不变),然后通过m次求余先后分离出tm个数字c,if(c==7)f++,t7的个数f。4g。f>0t7g=0t中不含数字4。mf>0&&t%7>0,s1f>0&&&&g==0,s2作相应统计。(2) 程序设计//77m位整数的个数s14的个数s2#include<stdio.h>voidmain(){intc,f,g,i,j,m;longb,d,s1,s2,t;printf("请输入位数m(2<=m<=9):"); b=1;s1=0;s2=0;for(i=2;i<=m;i++)b=b*10; //计算m位数的起点for(t=b;t<=10*b-1;t++) //枚举每一个m位数{d=t;f=0;g=0;for(j=1;j<=m;j++){c=d%10;d=d/10;if(c==7)f++;//7的个数if(c==4)g++;//4的个数}if(f>0&&t%7>0)s1++;//(shùzì)7且不7整除数的个数if(f>0&&t%7>0&&g==0)s2++;//统计(tǒngjì)其中不含数4的个数}printf(" s1=%ld,s2=%ld\n",s1,s2);}(3)程序运行示例(shìlì)请输入(shūrù)位数m(2<=k<=9):5s1=32152,s2=20412请输入(shūrù)位数m(2<=k<=9):6s1=366522,s2=20830017且7整除的没有重复数字的ms1,并指出其中最大的一个数。f数组,f[3]=22个数字“3”。#include<stdio.h>voidmain(){intc,e,g,i,j,m,f[10];longb,d,s1,t;printf("请输入位数m(2<=m<=9):"); b=1;s1=0;for(i=2;i<=m;i++)b=b*10; //计算m位数的起点for(t=b;t<=10*b-1;t++) //枚举每一个m位数{d=t;for(j=0;j<=9;j++)f[j]=0;//数组清零for(j=1;j<=m;j++){c=d%10;d=d/10;f[c]++; //c的个数}for(g=0,j=0;j<=9;j++)if(f[j]>1)g=1; //存在重复数字标注if(f[7]>0&&t%7==0&&g==0){s1++;e=t;} //统计个数,并把满足条件的数赋值给e}printf(" s1=%ld,e=%d\n",s1,e);}请输入位数m(2<=m<=9):5s1=1978,e=98763请输入位数m(2<=m<=9):6s1=11704,e=987651变通(biàntōng)2724且7整除(zhěngchú)的m(m>3)位整数的个数s1,并指其(qízhōng)从小到大排序n个数。#include<stdio.h>voidmain(){intc,e,i,j,m,n,f[10];longb,d,s1,t;printf("请输(shūrù)m,n:"); b=1;s1=0;for(i=2;i<=m;i++)b=b*10; //(jìsuàn)m位数的起点for(t=b;t<=10*b-1;t++) //枚举每一个m位数{d=t;for(j=0;j<=9;j++)f[j]=0;//数组清零for(j=1;j<=m;j++){c=d%10;d=d/10;f[c]++; //c的个数}if(f[7]==1&&f[4]==2&&t%7==0){s1++;if(s1==n)e=t; //,n个数赋值给e}}printf(" s1=%ld,e=%d\n",s1,e);}请输入m,n:6,1000s1=4096,e=417242真分数最值统计分母在指定区间[a,b]的最简真分数(分子小于分母,且分子分母无公因数)共有多少个,并求其中最接近指定分数x/y的最简真分数。a,b,[a,b417/2011真分数。测试数据:a=10,b=99,输出:a=100,b=999,输出:(1)设计要点设计求解一般情形:统计分母在指定区间[a,b]的最简真分数的个数,并求这些最简真分数的和(正整数a,b从键盘输入)。ijns在指定范围(fànwéi)[a,bj:a——b;同时对每一个分母j枚举(méijǔ)分子i:1——j-1。对每一分数i/j,置标志(biāozhì)t=0,然后进行是否存在公因数的检测。ij1ui/jukěnéng)不在[a,b[a,b]时前面已作了统计求和。u[2,i],因而设置(shèzhì)u[2,i枚举,若满足条件j%u==0&&i%u==0说明分子分母存在公因数,标记t=1后退出,不予统计与求和。t=0,说明分子分母无公因数,用nn=n+1个数。为了求最接近s=x/y的最简真分数,设双精度型变量smin存储|i/j-x/y|的最小值,把分数i/jdoublessmin较,若fabs((double)i/j-s)<sminfabs((double)i/j-s)赋值给smini1ij1j。i/jsmini1/j1x/y求最简真分数程序设计//[a,bx/y#include<stdio.h>#include<math.h>voidmain(){inta,b,i,j,i1,j1,t,u,x,y;longn;doubles,smin;printf("最简真分数分母在[a,b]内,请确定a,b:");scanf("%d,%d",&a,&b); //printf("x/yx,y:scanf("%d,%d",&x,&y);n=0;s=(double)x/y;smin=10;for(j=a;j<=b;j++)////输入指定分数枚举最简真分数的分母for(i=1;i<=j-1;i++)//枚举最简真分数的分子{for(t=0,u=2;u<=i;u++)//枚举因数if(j%u==0&&i%u==0){t=1;break;}//分子分母有公因数,则舍去if(t==0){n++;//统计最简真分数个数if(fabs((double)i/j-s)<smin){smin=fabs((double)i/j-s);i1=i;j1=j;}//比较求最接近x/y的最简真分数}}printf("最简真分数个数:%ld\n",n);printf("最接近%d/%d的最简真分数为:%d/%d\n",x,y,i1,j1);}程序运行示例(shìlì)最简真分数分母(fēnmǔ)在[a,b]内,请确定a,b:10,99指定(zhǐdìng)分数为x/y,请确定x,y:417,2011最简真分数个数:2976(jiējìn)417/201117/82最简真分数分母(fēnmǔ)在[a,b]内,请确定a,b:100,999指定分数为x/y,请确定x,y:417,2011最简真分数个数:300788417/201162/299特定数字组成的平方数2,3,5,6,7,8,977b,7位数的平方根c.a枚举[b,c]中的所有整数,计算d=a*a,这样确保所求平方数在d中。fd中各个数字的个数。如果f[3]=2d2个“3”。f[k]>1(k=0——9),说明d中存在有重复数字,返回。f[0]+f[1]+f[4]=07d中没有数字“0”,“1”,“4”,d满足题意要求,打印输出。//7位平方数#include<math.h>#include<stdio.h>voidmain(){intk,m,n,t,f[10];longa,b,c,d,w;n=0;b=sqrt(2356789);c=sqrt(9876532);for(a=b;a<=c;a++){d=a*a;w=d; //d为平方数for(k=0;k<=9;k++)f[k]=0;while(w>0){m=w%10;f[m]++;w=w/10;}for(t=0,k=1;k<=9;k++)if(f[k]>1)t=1; //测试平方数是否有重复数字if(t==0&&f[0]+f[1]+f[4]==0)//0,1,4{n++;printf("%2d:",n);printf("%ld=%ld^2\n",d,a);}}printf("%d个没有重复(chóngfù)7位平方数.\n",n);}1:3297856=1816^22:3857296=1964^23:5827396=2414^24:6385729=2527^25:8567329=2927^26:9572836=3094^26个没有(méiyǒu)7位平方数.变通(biàntōng)1:用1,2,…,99(kěyǐ)组成多少个没9位平方数?//组成没有(méiyǒu)9位平方数#include<math.h>#include<stdio.h>voidmain(){intk,m,n,t,f[10];longa,b,c,d,w;n=0;b=(int)sqrt(123456789);c=(int)sqrt(987654321);for(a=b;a<=c;a++){d=a*a;w=d; //d为平方数for(k=0;k<=9;k++)f[k]=0;while(w>0){m=w%10;f[m]++;w=w/10;}for(t=0,k=1;k<=9;k++)if(f[k]>1)t=1;//测试平方数是否有重复数字if(t==0&&f[0]==0)//测试平方数中没有重复数字,也没有数字0{n++;printf("%2d:",n);printf("%ld=%ld^2\n",d,a);}}printf("共可组成%d9位平方数.\n",n);}1:139854276=11826^22:152843769=12363^23:157326849=12543^24:215384976=14676^25:245893761=15681^26:254817369=15963^27:326597184=18072^28:361874529=19023^29:375468129=19377^210:382945761=19569^211:385297641=19629^212:412739856=20316^213:523814769=22887^214:529874361=23019^215:537219684=23178^216:549386721=23439^217:587432169=24237^218:589324176=24276^219:597362481=24441^220:615387249=24807^221:627953481=25059^222:653927184=25572^223:672935481=25941^224:697435281=26409^225:714653289=26733^226:735982641=27129^227:743816529=27273^228:842973156=29034^229:847159236=29106^230:923187456=30384^2共可组成(zǔchénɡ)309位平方数.构建(ɡòujiàn)横竖(héngshù)折对称(duìchèn)方阵试观察图所示的横竖折对称方阵的构造(gòuzào)特点,总结归纳其构造规律,设计并输出n(奇数)阶对称方阵。图 7阶横竖对称方阵输出15阶19阶横竖折对(duìchèn)方阵解:这是一道培养与锻炼观察能力、归纳能力与设计(shèjì)能力的有趣案例。2a[n][n]na[n][n]就是数据结a通,必须根据方阵的构造特点,归纳(guīnà)其构建规律,分区域给各元素赋值。构造(gòuzào)规律与赋值要点观察横竖折对称方阵(fānɡzhèn)的构造特点,方阵横向与纵向正中有一441。设阶数n(奇数)从键盘输入,对称轴为m=(n+1)/2。2a数组存储方阵中元素,行号为i,列号为j,a[i][j]为第ij列元素。可知主对角线(从左上至右下)有:i=j;次对角线(从右上至左下)有:i+j=n+1。4个区,如图所示。图 对角线分成的4个区jm-abs(m-j)赋值:if(i+j<=n+1&&i<=j||i+j>=n+1&&a[i][j]=m-abs(m-j);im-abs(m-i)赋值:if(i+j<n+1&&i>j||i+j>n+1&&a[i][j]=m-abs(m-i);输时,按m-a[i][j]打印。程序设计//横竖折对称方阵#include<stdio.h> //2个头文件#include<math.h>voidmain(){inti,j,m,n,a[30][30]; //定义数据结构printf("请确定方阵阶数(奇数)n:");scanf("%d",&n);if(n%2==0) {printf("m=(n+1)/2;for(i=1;i<=n;i++)for(j=1;j<=n;j++){ if(i+j<=n+1&&i<=j||i+j>=n+1&&i>=j)a[i][j]=m-abs(m-j); //if(i+j<n+1&&i>j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论