蓝桥试题测试---查找整数(scanf流问题)

来源:互联网 发布:python能做网站开发吗 编辑:程序博客网 时间:2024/06/06 17:40
问题描述

给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

输入格式

第一行包含一个整数n。

第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。

第三行包含一个整数a,为待查找的数。

输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定

1 <= n <= 1000。


这个题目的实现是非常简单的,但是这道题涉及到了我一个薄弱的知识点:scanf流。根据题目中的样例输入可知,第一次我们需要输入数字的个数,第二次我们需要输入每个数字,第三次输入目标值。由于数字的个数是不确定的,所以在第二次输入的时候不可能采用scnaf("%d%d%d...",&a,&b,&c...)这种格式。所以我就想用这种方法实现:

while(count--){scanf("%d",&array[num++]);}
  当我把这行代码写完之后,我突然意识到了一个问题,这样结合while()循环的方式来输入,岂不是每输入一次数字都要按一下回车?这样数字输入完成之后,数字的格式不是一横行,而是一竖列,这样是不符合题目的要求的。我想死马当活马医吧,在第二次输入当中,我大胆采用每次输入一个数字后不按回车,而按空格。如下:


第一行的5代表数字的个数,第二行的五个数字表示我输入的格式采用空格隔开,输入目标数字5。我惊讶的发现,输出结果竟然正确!

我C语言基础并不是很好,绞尽脑汁想不明白这是为什么。在百度上查阅了关于scanf资料,了解了其中的原因。当我采用空格隔开的方式输入数字时候,这五个数字会先缓存到scanf流当中,scanf在进行第一次扫描后,首先扫描到了数字1,接下来遇到了空格,这个时候会停止扫描,停止扫描之后由于while()循环的作用,scanf马上会循环进入第二次扫描,扫描到数字2之后又遇到了空格,停止扫描,这时候循环后进入第三次扫描,以此类推,由于while(count--)的限制,scanf会扫描五次后结束。这就是原因所在。接下来贴出完整代码:

#include<stdio.h>#define MAXN 10000+10int array[MAXN];int main(){int count,i,m;int num=0;int temp=-1;int target;scanf("%d",&count);while(count--)scanf("%d",&array[num++]);scanf("%d",&target);for(i=0;i<num;i++){if(array[i]==target){printf("%d",i+1);break;}}if(i==num)printf("%d",temp);return 0;}




1 0
原创粉丝点击