c语言复 赛题 课件.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息学奥赛复赛练习题 1. 模拟开关(题目名称: moni。bas)(12分) [题目描述]:有N盏电灯排成一行,依次编号为1,2,3,…,N。现各有一个开关,开始灯都亮着得。现在还有N个人,第一人走过来依次把1与1得倍数电灯得开关都拉一下。第三个人走过来依次把3与3得倍数得开关都拉一下,第五个人走过来依次把5与5得倍数得开关都拉一下(按奇数得规律),…问最后都有哪些灯就是关着得?   [输入文件] 文件名:moni.in?  文件中只有一行,包含1个整数N(其中5≤N≤30)?  [输出文件] 文件名:moni、out   文件中共有若干行,每一行一个数据,分别为那些关着得灯泡得编号。  要求:每一行得输出数据都从第一列开始。  [样例输入]:moni。in得内容为:   10?  [样例输出]:moni.out得内容为:  1?  2?  4?  8?  9 main()? {    int i,n,s,x;?   int a[1000]; scanf(%d",&n);?   for(i=1;in;i++) a[i]=1; x=1;?  while(x=n)?   {  s=0;   while(s<=n)?   {s=s+x;    a[s]=1—a[s];?   }   x=x+2;? }   s=0;   for(i=1;i〈n;i++) if(a[i]==0)   {printf(%d ,i);s=s+1;   }    if(s==0) printf(0”); } 3.【问题描述-明明得随机数】   明明想在学校中请一些同学一起做问卷调查,为了实验得客观性,她先用计算机生成了?  N 个1 到1000 之间得随机整数,(N≤100),对于其中重复得数字,只保留一个,把其余相?  同得数去掉,不同得数对应着不同得学生得学号、然后再把这些数从小到大排序,按照排好?  得顺序去找同学做调查。请您协助明明完成“去重”与“排序”得工作。   【输入文件】?  输入文件random.in 有2 行,第1 行为1 个正整数,表示所生成得随机数得个数:N 第二行有N 个用空格隔开得正整数,为所产生得随机数、?  【输出文件】   输出文件random.out 也就是2 行,第1 行为1 个正整数M,表示不相同得随机数得个数。?  第2 行为M 个用空格隔开得正整数,为从小到大排好序得不相同得随机数、   【输入样例】?  10   20 40 32 67 40 20 89 300 400 15    【输出样例】?  8?  15 20 32 40 67 89 300 400 ?  /*本题主要就是考察对排序算法得掌握,只不过外加了一个去重得操作。本题得算法有很多,我们在考试时,时间紧,题目难度大、如果我们能用最简单得思维方式解决问题得话,就不一定把很多得时间放在代码执行效率得优化问题上。有时候牺牲一点空间(内存)与时间对于获取更多得考试时间就是非常有必要得。本题最简单得思想方法,就就是根据题目要求,先对给定得一组数据进行排序,排序得方法可以使用最简单得冒泡算法来完成。由于本题得输出结果要求我们必须先统计出不重复数据得个数,所以当数据排序之后,我们可以先对所有得数据遍历一次,这一次遍历得目得就就是让我们统计出不重复数据得个数,并将其输出、最后,我们还需进行一次遍历,这次遍历用于打印出排序之后不重复得所有数据结果.   */   #include   int main()?  {?   FILE *fp1,*fp2;?   int N,M=0;?   int i,j;? int a;?   int num[100]; //根据题目所给得数据规模定义数组得大小   if((fp1=fopen(”random.in”,”r”))==NULL)    {   printf("cannot open file\n");   return 0;? }      fscanf(fp1,"%d”,N); //输入随机数得个数 ?   for(i=0;i〈N;i++)? fscanf(fp1,%d”,num[i]); //将已知得随机数存放到初始数组中 ?   ?   for(i=0;i    for(j=i+1;jN;j++)?  { if(num[i]〉num[j])   {?   a=num[i];   num[i]=num[j];?   num[j]=a;?   }?  }   ?   fp2=fopen(”random、out",”w); //打开写文件得指针?   ?   for(i=0;i?   {   if(i>0

文档评论(0)

189****0801 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档