您的位置:首页 > 其它

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

2016-11-26 11:43 323 查看
问题描述

给出一个包含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+10
int 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐